vue:自定义组件的v-model使用

一般我们在做自定义组件的时候是使用props$emit来实现子父组件的数据交互,这样做就需要在父组件里面去定义一个方法来接收子组件的状态改变时触发的事件,使用v-model就不必在父组件里面去监听子组件的方法,父组件可以直接获取到v-model值的改变:

子组件中除了定义props以外,新增一个model选项:

子组件:

<template>
  <div class='filter-menu'>
    <div class="item" v-for="(item, index) in menus" :key="index" @click="changeActive(index)">
    {{item.name}}
    </div>
  </div>
</template>

<script>
export default {
  name: 'filter-menu',
  components: {},
  props: {
    menus: {
      type: Array,
      default: () => {
        return [];
      }
    },
    align: {
      type: String,
      default: 'left'
    },
    showLine: {
      type: Boolean,
      default: true
    },
    active: {
      type: Number,
      default: 0
    }
  },
  model: {
    prop: 'active', // 这里prop的值对应的是上面props选项中的一个字段,这个字段也是父组件v-model的值
    event: 'change' // $emit触发的事件
  },
  data () {
    return {
    };
  },
  mounted () {},
  computed: {},
  created () {},
  methods: {
    changeActive (e) {
      this.$emit('change', e); // 此处的change对应的model选项event值
    }
  }
};
</script>

父组件:
父组件中通过watch可以监听到active的变化

<filter-menu v-model="active" :menus="filterMenus" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mosowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值