.sync修饰符
先看以下例子。
如果组件想对外部props中的数据进行修改,该怎么做呢?
<template>
<div class="app">
我现在有 {{total}}
<hr>
<Child :money="total" v-on:update:money = "total=$event"/>
</div>
</template>
<script>
import Child from "./Child.vue";
export default {
data() {
return { total: 10000 };
},
components: { Child: Child }
};
</script>
组件代码如下:
<template>
<div class="child">
{{money}}
<button @click="$emit('update:money', money-100)">
<span>花钱</span>
</button>
</div>
</template>
<script>
export default {
props: ["money"]
};
</script>
其中$emit相当于Vue中的eventBus,作用为触发事件并传参;而其父组件可以通过$event来获取其参数。
这行代码
<Child :money="total" v-on:update:money = "total=$event"/>
就等价于
<Child :money.sync = "total" />
总结
修饰符.sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定。
如果不用.sync,也可以使用$event来进行监听。