.sync修饰符作用
.sync修饰符是一个语法糖,可以简化父子组件通信操作,当子组件想改变父组件数值时,父组件只需要使用**.sync** 修饰符,子组件使用props 接收属性,再使用**this.$emit('update:属性', 值);**就可以实现子组件更新父组件数据的操作。
以下将用el-dialog例子展示传统父子通信及使用.sync修饰符后的父子通信区别:
传统父子通信
javascript
//父组件
<template>
<div>
<button @click="openDialog">打开对话框</button>
<!--给子组件传递dialogVisible属性-->
<ChildDialog :dialogVisible="dialogVisible" @updateDialogVisible="handleDialogVisibleChange"></ChildDialog>
</div>
</template>
<script>
import ChildDialog from './ChildDialog.vue';
export default {
components: {
ChildDialog
},
data() {
return {
dialogVisible: false
};
},
methods: {
openDialog() {
this.dialogVisible = true;
},
//收到子组件传来的新值,更新dialogVisible
handleDialogVisibleChange(newVisible) {
this.dialogVisible = newVisible;
}
}
};
</script>
//子组件
<template>
<el-dialog :visible="dialogVisible" @close="closeDialog">
<span>这是对话框内容</span>
</el-dialog>
</template>
<script>
export default {
props: {
dialogVisible: {
type: Boolean
}
},
methods: {
closeDialog() {
//自定义监听事件,将新值传给父组件
this.$emit('updateDialogVisible', false);
}
}
};
</script>
.sync修饰符父子通信
javascript
//父组件
<template>
<div>
<button @click="dialogVisible = true">打开对话框</button>
<!--父组件不需要再绑定监听事件获取新值再赋给dialogVisible
.sync修饰符可以自动完成数据更新操作,更简洁-->
<ChildDialog :dialogVisible.sync="dialogVisible"></ChildDialog>
</div>
</template>
<script>
import ChildDialog from './ChildDialog.vue';
export default {
components: {
ChildDialog
},
data() {
return {
dialogVisible: false
};
}
};
</script>
//子组件
<template>
<el-dialog :visible="dialogVisible" @close="closeDialog">
<span>这是对话框内容</span>
</el-dialog>
</template>
<script>
export default {
props: {
dialogVisible: {
type: Boolean
}
},
methods: {
closeDialog() {
//告诉父组件哪个属性更新并且传新值
this.$emit('update:dialogVisible', false);
}
}
};
</script>
欢迎指正!