对于Vue.js 2来说,两者基本上做的是相同的事情 - 启用双向绑定,尽管
.sync
更加灵活多样。它是在为组件添加v-model之后添加的。
.sync
允许在多个属性上使用v-model逻辑。让我们来比较一下:
<comp
:value.sync="username"
:age.sync="userAge"
/>
扩展为:
<comp
:value="username"
:age="userAge"
@update:value="val => username = val"
@update:age="val => userAge = val"
/>
<input v-model="userName1" />
<comp v-model="userName2" v-model:profile-name="profileName" />
扩展为:
<input
:value="userName1"
@input="event => userName1 = event.target.value"
/>
<comp
:value="userName2"
:profile-name="profileName"
@update:value="val => userName2 = val"
@update:profile-name="val => profileName = val"
/>
我们可以看到的区别有:
- 默认的属性名`v-model`总是绑定到名为`value`的属性
- `.sync`允许您使用多个属性
- 组件发出的事件名称(`.sync`为`@update`,`v-model`为`@input`)
`.sync`的一个非常有趣的特性是它对对象的特殊处理。当在对象上使用`.sync`修饰符时,它将一次设置多个属性(更多
这里)。
该使用哪个呢?将属性`value`作为组件的键值载体是一种标准模式。在这种情况下,如果您有`value`属性并且想要为其启用双向绑定,则使用`v-model`。在其他所有情况下,请使用`.sync`。
v-model
和.sync
API来处理他们的“单个可编辑属性”组件是有意义的吗?即发出input
和update:value
两种事件?我担心会发出太多的事件,但也想到这不会成为问题。 - Max Coplan