Vue 的 .sync 修饰符是用来对 prop 进行“双向绑定”设计的一种模式,以 update:myPropName 的模式, 通过 this.$emit 触发事件,向外传参。
使用代码如下:
<template>
<div id="app">
<div>{{money}}</div>
<MyComponent :money.sync="money" />
</div>
</template>
<script>
import Vue from 'vue'
Vue.component('myComponent', {
template: '<div @click="updateMoney">点击</div>',
props: ['money'],
methods: {
updateMoney() {
this.$emit('update:money', this.money - 100)
}
}
})
export default {
data() {
return { money: 10000 },
}
}
</script>
:money.sync="money" 等价于 :money="money" @update:money="total = $event" ,$event 可以获取 $emit 的参数。
另外,Vue 文档 中提到几点需要注意的:
- 带有
.sync修饰符的的v-bind不能和表达式一起使用(例如:money.sync="money + '!'"是无效的) - 我们用一个对象同时设置多个 prop 的时候,也可以将
.sync修饰符和v-bind配合使用。但是需要注意,将v-bind.sync用在一个字面量的对象上是无效的,例如v-bind.sync="{ money }"。