.sync修饰符
在某些情况下,我们可能需要对一个 prop 进行“双向绑定”。
简单的方法是 子组件向父组件发送一个事件,父组件监听该事件,然后更新prop
简单的栗子:父子组件通信
父组件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <template> <div id="FatherCom"> <h4>我是父组件</h4> <div v-show="show">能看得见我吗?</div> <hr> <ChildCom :show="show" @update:show="update_show"/> </div> </template>
<script> import ChildCom from './ChildCom'
export default { name: 'FatherCom', components: { ChildCom }, data() { return { show: true } }, methods: { update_show(val) { this.show = val } } } </script>
<style scoped>
</style>
|
子组件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <template> <div id="ChildCom"> <h4>我是子组件</h4> <button @click="handle" >显示/隐藏</button> </div> </template>
<script> export default { name: 'ChildCom', props:['show'], methods:{ handle(){ this.$emit('update:show',!this.show) } } } </script>
<style scoped>
</style>
|
但是以上父组件定义 自定义事件的步骤过于繁琐了。
可以通过 .sync修饰符简化父组件的代码:
- 在子组件内触发的事件名要以
update:myPropName
方式命名(尤雨溪要求的),
- 父组件
:show:show
加上.sync修饰符, 即 :show.sync:show
这样设置父组件就不再需要单独再去绑定@update:show事件了 。
修改代码:
1 2 3 4 5 6 7 8 9
| <template> <div id="FatherCom"> <h4>我是父组件</h4> <div v-show="show">能看得见我吗?</div> <hr> <ChildCom :show.sync="show" /> </div> </template>
|
1 2 3 4
| handle(){ this.$emit('update:show',!this.show) }
|