v-model 维护组件内外数据双向同步

父组件在使用子组件期间,可以使用 v-model 指令 维护组件内外数据的双向同步。

>> 在 vue2.x 中,子组件和父组件同步数据时,通常会使用下面这种方式

  • 父组件向子组件传值

子组件定义 props 属性,父组件使用 v-bind 绑定该属性

// 父组件
<count :num="count"></count>
  
data() {
  return {
    count: 0
  }
}
// 子组件
props: ['num']
  • 父组件向子组件传值

子组件定义自定义事件,利用 $emit 触发事件并传值,父组件监听自定义事件。

如下面这个例子,如果 add() 函数被调用,num 值自增,则要引起父组件 count 值对应改变。这时就需要调用 $emit() 触发自定义事件,将更新的值传递给父组件;

export default {
  props: ['num'],
  methods: {
    add() {
      this.$emit('numchange', this.num + 1)
    }
  }
}

同时,在父组件中设定负责监听自定义事件的函数,接收子组件传递来的值并作出对应改变。

// 父组件
<count :num="count" @numchange="getNum"></count>

data() {
  return {
    count: 0
  }
},
methods: {
  getNum(num) {
    this.count = num
  }
},

>> 在 vue3.x 中,子组件和父组件同步数据时,则可以利用 v-model 来进行简化,无需再在父组件中设定监听自定义事件的函数即可同步数据

具体而言,在父组件中,需要在 v-bind 指令前添加 v-model 指令。而在子组件中,需要声明 emit 自定义事件,格式要求为: update: xxx。子组件调用 $emit() 触发自定义事件,则新值就会被更新到父组件所绑定的值中(如此处的 count)。

// 父组件
<count v-model:num="count"></count>

data() {
  return {
    count: 0
  }
}
// 子组件
export default {
  props: ['num'],
  emits: ['update:num'],
  methods: {
    add() {
      this.$emit('update:num', this.num + 1)
    }
  }
}

需注意:相比于 vue 2.x ,在自定义事件时 vue 3.x 提供一个 emits 选项,和现有的 props 选项类似。这个选项可以用来定义一个组件可以向其父组件触发的事件。参考 >> 官方说明

通过了解 vue2 和 vue3 同步子组件和父组件数据的方法,即可实现下面效果:

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

imByte

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

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

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

打赏作者

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

抵扣说明:

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

余额充值