首先熟悉下Vue规则:
- 组件不能直接修改props修改外部数据,需要发布需求出去,让外部数据接收并且自己修改。
- $emit可以触发一个事件,并且传参。
emit的参数
Vue 2.3.0版本起重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在,它会被扩展为一个自动更新父组件属性的 v-on 监听器。
推荐以update:myPropName 的模式触发事件取而代之,例如:
//emit发布了一个update:money事件
<button @click="$emit('update:money', 100)">
然后父组件可以监听那个事件并根据需要更新一个本地的数据属性。例如:
<Child :money v-on:"update:money"="total=$event"/>
也就是说,父组件通过v-on订阅了这个事件'update:money',并且可以得到这个100,然后选择更新自己的数据
由于这类实例比较常用,所以Vue作者就把父组件接收的给简化了为.sync修饰符
<Child :money.sync="total"/>//简化前<Child :money v-on:"update:money"="total=$event"/>
.sync写法被称为语法糖。