官方文档对.sync修饰符已经做了详细讲解。.sync 修饰符以前存在于 Vue1.0 版本里,后来在2.0版本中移除了 .sync 修饰符。
但是在 2.0 发布之后的实际应用中,我们发现 .sync 还是有其适用之处,比如在开发可复用的组件库时。我们需要做的只是让子组件改变父组件状态的代码更容易被区分。
从 2.3.0 起我们重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器。
举个例子:
在包含 titleprop的假设的组建中,我们可以用下面方法表达对其赋新值的意图:
this.$emit('update:title',newTitle)
复制代码
然后父组件可以监听这个事件,并根据需要更新一个本地的数据property:
<text-document
v-bind:title="doc.title"
v-on:update:title="doc.title=$event"
></text-document>
复制代码
为了方便起见,我们为这种模式提供一个缩写,即.sync修饰符:
<text-document v-bind:title.sync="doc.title></text-document>
复制代码
这个例子不够形象,可以看下面的实例:
父组件 App.vue 子组件 Child.vue
需要注意的是
-
带有
.sync修饰符的v-bind不能和表达式一起使用 (例如v-bind:title.sync=”doc.title + ‘!’”是无效的)。取而代之的是,你只能提供你想要绑定的 property 名,类似v-model。 -
当我们用一个对象同时设置多个 prop 的时候,也可以将这个
.sync修饰符和v-bind配合使用:
<text-document v-bind.sync="doc"></text-document>
复制代码
这样会把 doc 对象中的每一个 property (如 title) 都作为一个独立的 prop 传进去,然后各自添加用于更新的 v-on 监听器。
- 将
v-bind.sync用在一个字面量的对象上,例如v-bind.sync=”{ title: doc.title }”,是无法正常工作的,因为在解析一个像这样的复杂表达式的时候,有很多边缘情况需要考虑。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END






















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)