在说明.sync
修饰符作用之前,我们需要先弄清楚尤雨溪制定的Vue的三条规则:
- 组件不能修改
props
外部数据 - 在组件内
this.$emit
可以触发事件并传参 -
$event
可以接收this.$emit
传递的参数
那么当我们想要在组件内修改外部数据时,我们可以利用以上三条规则:
组件内部触发事件update:title
并传递参数newTitle
给$event
:
this.$emit('update:title', newTitle)
组件外部响应事件update:title
并接收参数$event
:
<text-document :title="doc.title" @update:title="doc.title = $event"></text-document>
这样写是否太麻烦了呢?尤雨溪也是这样觉得,于是他创造了一个语法糖.sync
,以上写法可以等价于:
<text-document :title.sync="doc.title"></text-document>
总结:.sync
修饰符可以便捷的实现——父组件监听子组件变更props
数据的事件(update:myPropName
)并根据需要更新一个本地的数据 property
。