通常我们知道,父子组件数据传递:子组件通过props接收父组件传过来的数据,想改变父组件这个数据,那么子组件通过$emit方法触发父组件身上的自定义事件从而改变这个值,晚上听群里小伙伴说起父子组件通信话题,了解到sync修饰符,可以在子组件中直接去修改父组件对应的值,有点叼,打破单向数据流常规,之前并没去关注这东西,带着好奇心赶紧查看了一番。
vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync 。但是在 2.0 发布之后的实际应用中,发现 .sync 还是有其适用之处,从 2.3.0 起vue重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。
示例
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <!DOCTYPE html >
<html lang ="zh-cn">
<head >
<meta http -equiv ="Content-Type" content ="text/html; charset=utf-8" />
<title ></title >
<link rel ="stylesheet" type ="text/css" href ="./fontFace.css">
<script crossorigin ="anonymous" integrity ="sha384-+jvb+jCJ37FkNjPyYLI3KJzQeD8pPFXUra3B/QJFqQ3txYrUPIP1eOfxK4h3cKZP"
src ="https://lib.baomitu.com/vue/2.6.11/vue.js"></script>
</head >
<body >
<div id ="app">
<div class="details">
<my -component :show .sync ='stateShow' style ="border:1px solid #ccc;"></my -component >
<button @click ="changeValue">切换状态 </button >
{{stateShow }}
</div >
</div >
</body >
<script >
Vue .component ('my-component', {
template : ` <div v -if="show">
<p >默认初始值是 {{show }},所以是显示的 </p >
<button @click .stop ="closeDiv">关闭 </button >
</div >` ,
props : ['show'],
methods : {
closeDiv () {
//触发 input 事件,并传入新值,注意,必须在要改变的值前面带上update
this .$emit('update:show', false);
}
}
})
new Vue ({
el : "#app",
data () {
return {
stateShow : true,
}
},
methods : {
changeValue () {
this .stateShow = !this .stateShow
}
}
})
</script>
</html > |
效果

小结
通过上面案例可以看出,整个流程就是父组件通过.sync修饰符将show变量传给了子组件,show变量对应的状态值是valueChild,然后子组件props接收,子组件上的事件去触发this.$emit('update:show', false);去改变show的值,并且直接同步修改了父元素上的valueChild的状态。
最后vue知识点还是很多的,解决问题的方式也很多,大家还是要多多交流,才能共同进步,三人行必有我师焉,和别人交流才能更好的察觉自己的漏洞。
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
共 0 条评论关于"Vue.js组件通信之.sync修饰符(父子篇)"
最新评论