Vue父子组件交互方式小结

 

sync后缀

1. 子组件自身事件,更新自身属性,如这里show, 并同时将属性值"同步"给父组件中的data,如这里valueChild
2. 父组件对data改变, 可以同步给子组件的属性

 1 <template>
 2   <div class="details">
 3     <myComponent :show.sync='valueChild' style="padding: 30px 20px 30px 5px;border:1px solid #ddd;margin-bottom: 10px;">
 4     </myComponent>
 5     <button @click="changeValue">toggle</button>
 6   </div>
 7 </template>
 8 <script>
 9 //组件属性(show)的改变,同步到父组件的data,父组件的data值的改变也可以同步到子组件的属性,即父组件与子组件属性值之间的通信
10 import Vue from "vue";
11 Vue.component("myComponent", {
12   template: `<div v-if="show">
13                 <p>默认初始值是{{show}},所以是显示的</p>
14                 <button @click.stop="closeDiv">关闭</button>
15               </div>`,
16   props: ["show"],
17   methods: {
18     closeDiv() {
19       this.$emit("update:show", false); //效果是将子组件更新组件内部属性show,并传入新值"false", update是vue 
20     }
21   }
22 });
23 export default {
24   data() {
25     return {
26       valueChild: true
27     };
28   },
29   methods: {
30     changeValue() {
31       this.valueChild = !this.valueChild;
32     }
33   }
34 };
35 </script>

 vue中emit与on和BUS

形式1  参考

 Vue.prototype.bus = new Vue(); //vue原型链挂载总线

 this.bus.$emit("change",data); //子组件发送数据

this.bus.$on("change",function(data){

})

//子组件接收数据

形式2

1 var Event = new Vue();
2 Event.$emit('msg',this.msg);
3 Event.$on('msg',function(msg){
4     //对数据处理
5 }

第1行: 相当于又new了一个vue实例,Event中含有vue的全部方法;
第2行:发送数据,第一个参数是发送数据的名称,接收时还用这个名字接收,第二个参数是这个数据现在的位置;
第3行~第5行: 接收数据,第一个参数是数据的名字,与发送时的名字对应,第二个参数是一个方法,要对数据的操作

posted @ 2020-07-16 15:53  轴轴  阅读(540)  评论(0编辑  收藏  举报