vue中.sync对比v-model的区别

文章类型:Vue

发布者:test

发布时间:2023-03-25

一:.sync

可以实现父子组件之间的双向绑定,

并且可以实现子组件同步修改父组件的值,父子组件之间数据相互更新,

针对更多的是各种的状态变更,是一种 update 操作

相当于多了一个事件监听,会把接受到的值赋值给数据绑定的数据项中



<Son :a.sync="num" :b.sync="num2" />

<!-- 它等价于 -->
<Son
:a="num"
:b="num2"
@update:a="val=>num=val"
@update:b="val=>num2=val"
/>

this.$emit('update:a', '123')

二:v-model

在表单 input、textarea、select 等元素上创建双向数据绑定,

(value + input语法糖),为不同的输入元素使用不同的属性并抛出不同的事件

1:text 和 textarea =>使用 value 属性和 input 事件

2:checkbox 和 radio =>使用 checked 属性和 change 事件

3:select 字段将 value =>作为 prop 并将 change 作为事件

<com1 v-model="num"></com1>
<!-- 等价于 -->
<com1 :value="num" @input="(val)=>num=val"></com1>

三:相同点

都可以实现父子组件中的数据的双向通信,都是为了实现数据的“双向绑定”

四:不同点

1:格式写法不同,v-model="num", :num.sync="num"

2:实现方式不同,v-model: @input + value , :num.sync: @update:num

3:数量不同,v-model只能用一次;.sync可以有多个

五:注意点

1:vue3已经弃用.sync,并且v-model支持多个

2:带有 .sync 不能 和表达式、字面量的对象一起使用