在Vue中,不推荐子组件直接去修改外部数据,因为会出现两个修改的源头,数据处理会变得混乱。因此利用Vue的实例都有eventBus功能,用$emit去触发事件、传入参数,用$event获取参数,实现子组件在修改数据都需要通知父组件来修改的需求。
// 子组件Demo,子组件的外部数据bar,由父组件的传入foo
// 子组件
<div @click="$emit('update:bar,bar-1')">{{bar}}<div/>
// 父组件
<Demo :bar="foo" v-on:update:bar="foo=$event"/>
父实例上的代码还是挺多的,因此Vue进一步提供了语法糖---修饰符sync
// 父组件
<Demo :bar.sync="foo"/>
- 注意,update:bar即事件名需遵守这种格式。