Vue .sync修饰符
2021-06-21 本文已影响0人
Cherry丶小丸子
在有些情况下,我们可能需要对一个 prop 进行“双向绑定”,vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync 。但是在 2.0 发布之后的实际应用中,我们发现 .sync 还是有其适用之处,比如在开发可复用的组件库时。我们需要做的只是让子组件改变父组件状态的代码更容易被区分。从 2.3.0 起我们重新引入了 .sync 修饰符,但是这次它只是
作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器
示例
// 子组件中触发原生事件,从而触发emit方法
this.$emit('update:title', newTitle); // 也是语法
// 父组件扩展为
<textDocument v-bind:title="doc.title" v-on:update:title="doc.title = $event"></textDocument>
// 为了方便起见,我们为这种模式提供一个缩写,即 .sync 修饰符:
<textDocument v-bind:title.sync="doc.title"></textDocument>
// 等同于
<textDocument :title.sync="doc.title"></textDocument>
子组件
<template>
<div id="app">
<el-input v-model="inputModel" placeholder="请输入内容" @input="inputEvent"></el-input>
</div>
</template>
export default{
name: 'children',
props:{
inputModel: ''
},
methods:{
inputEvent(value){
this.$emit('update:inputModel', value); // 当改变输入框的值时,父组件中 inputModel 也会同步
}
}
}
父组件
<children :inputModel.sync="inputModel"></children>
<el-button @click="test">测试按钮</el-button>
export default{
name: 'parent',
data(){
return{
inputModel: 'hello world', // 默认向子组件传值
}
},
mounted:{
test(){
console.log(this.inputModel); // 当子组件改变 inputModel 值时,点击测试按钮,查看 inputModel
}
}
}