vue.js - 在自定义组件上使用时 v-model 和 .sync 有什么区别
问题描述
我不明白组件上使用的 v-model 和 .sync 之间的区别。
<my-component v-model="myVar">
V-model 是将变量 (myVar) 绑定到组件属性 'value' 并监听组件发出的 'input' 事件以更新变量 'myVar' 的简写。
<my-component v-bind:prop1.sync="myVar">
.sync 是将变量(myVar)绑定到组件属性(在本例中为“prop1”)并侦听组件发出的“update:prop1”事件以更新变量“myVar”的简写。
我知道默认情况下 v-model 仅适用于 'value' 属性和 'input' 事件,但即便如此也可以使用组件中的 'model' 选项进行自定义。
如果有人可以向我解释差异或何时使用什么,那就太好了。
这是我以三种不同方式使用相同组件的示例:1)手动绑定 + 事件监听 2).sync 3)v-model
解决方案
对于 Vue.js 2,两者几乎都做同样的事情 - 启用双向绑定,虽然.sync
更通用。它是在为组件添加 v-model 之后添加的。.sync
允许对多个道具使用 v-model 逻辑。让我们比较一下:
<comp :value.sync="username" :age.sync="userAge" />
扩展为:
<comp :value="username" :age="userAge" @update:name="val => userName = val" @update:age="val => userAge = val" />
<comp v-model="userName" />
扩展为:
<comp :value="username" @input="val => username = val" />
我们可以看到的差异是:
默认道具名称
v-model
始终绑定到名为的属性value
.sync
允许您使用多个道具从组件发出的事件名称(
@update
for.sync
和@input
forv-model
)
一个非常有趣的特性.sync
是它对对象的特殊处理。在对象上使用.sync
修饰符时将同时设置多个道具(更多在这里)
使用哪一个?使用属性value
作为组件的键值载体是一种标准模式。在这种情况下,如果您有value
属性并希望为其启用 2 路绑定,请使用v-model
. 在所有其他情况下使用.sync
推荐阅读
- azure - Servicebus 和 Function App(Vnet) 集成
- java - 使用 WebClient 为 multipart/form-data 发送 POST 请求的 Content-Length 标头
- android - (Kotlin)我想在不使用 addValueEventListener 的情况下从实时数据库(firebase)中检索数据
- python - 如何用python计算音频频谱中的频率峰值
- c++ - 将 boost::format 与 std::vector 一起使用
- python - 如何在 Ansible 的同一个自定义模块中执行两个不同的功能?
- python - send_keys 选择了错误的选项 [selenium python]
- python - 用于多个输入变量的 JAX 自定义 VJP 函数不适用于 NumPyro/HMC-NUTS
- python-3.x - 如何在 CSV 文件 python-3 中查找字符串
- python - Python电报机器人(Telebot)