1、兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据
2、创建一个Vue的实例,让各个兄弟共用同一个事件机制。
3、传递数据方,通过一个事件触发bus.$emit
(方法名,传递的数据)。
4、接收数据方,通过mounted(){}
触发bus.$on
(方法名,function(接收数据的参数){用该组件的数据接收传递过来的数据}),此时函数中的this已经发生了改变,可以使用箭头函数。
demo 如下:
首先创建一个单独的js文件bus.js,内容如下
import Vue from 'vue'
export default new Vue
父组件如下:
<template>
<components-a></components-a>
<components-b></components-b>
</template>
子组件a如下:
<template>
<div>
<button @click="abtn">A按钮</button>
</div>
</template>
<script>
import from '../../js/bus.js'
export default {
name: 'components-a',
data () {
return {
‘msg':"我是组件A"
}
},
methods:{
abtn:function(){
let _this = this;
//$emit这个方法会触发一个事件
bus .$emit("myFun", _this.msg)
}
}
}
</script>
子组件b如下:
<template>
<div>
<div>{{btext}}</div>
</div>
</template>
<script>
import bus from '../../js/bus.js'
export default {
name: 'components-b',
data () {
return {
'btext':"我是B组件内容"
}
},
created:function(){
this.bbtn();
},
methods:{
bbtn:function(){
bus .$on("myFun",(message)=>{
//这里最好用箭头函数,不然this指向有问题
this.btext = message
})
}
}
}
</script>
这样的话点击组件A里面的按钮,组件B即可获取A组件传来的值。👌
网友评论