美文网首页
Vue高级特性之自定义v-model

Vue高级特性之自定义v-model

作者: jia林 | 来源:发表于2022-05-24 23:33 被阅读0次

前言:日常开发中,除了直接在input标签上使用v-model指令外,封装的组件也需要v-model,接下来看看如何在Vue组件中使用自定义v-model

  • home.vue

<template>
  <div class="home-box">
    <category v-model="categoryValue" @customChange="onChange"/>
  </div>
</template>

import category from "./category.vue"
  • 组件
<a-select style="width: 120px" @change="handleChange" :value="params">  // 这里使用value或者v-model都可以
      <a-select-option v-for="item in list" :value="item.val" :key="item.val">
        {{ item.label }}</a-select-option
      >
   </a-select>

export default {
  model: {
  // 要和prop里接收的参数对应
    prop: "params",
   // 随便命名事件,对应下面$emit即可
    event: "customChange",
  },
  prop: {
    params: {
      type: String,
      default: "",
    },
  },
}

  handleChange(value) {
          this.$emit('customChange',value)
      }
这里的model是组件里的关键属性,model里定义的prop属性值,要和prop里接收的参数值相对应,然后在进行事件操作时,将event里事件$emit即可。这样就可以使用自定义的v-model

完整代码

<template>
  <div class="home-box">
    <category v-model="categoryValue" @customChange="onChange"/>
  </div>
</template>

<script>
import category from "./category.vue"
export default {
  data() {
    return {
      categoryValue:''
    };
  },
  components:{
    category
  },  
  methods: {
    onChange(value) {
      console.log(value, 'value')
    }
  },
};
</script>


// 子组件
<template>
  <div>
    <a-select style="width: 120px" @change="handleChange" :value="params">
      <a-select-option v-for="item in list" :value="item.val" :key="item.val">
        {{ item.label }}</a-select-option
      >
    </a-select>
  </div>
</template>

<script>
export default {
  model: {
    prop: "params",
    event: "customChange",
  },
  prop: {
    params: {
      type: String,
      default: "",
    },
  },
  data() {
    return {
      list: [
        {
          label: "类目1",
          val: "1",
        },
        {
          label: "类目2",
          val: "2",
        },
      ],
    };
  },
  methods: {
      handleChange(value) {
          this.$emit('customChange',value)
      }
  }
};
</script>


相关文章

网友评论

      本文标题:Vue高级特性之自定义v-model

      本文链接:https://www.haomeiwen.com/subject/mtvsprtx.html