1、创建bus.js文件并且在main.js中引入
import Vue from 'vue';
const Bus = new Vue()
export default Bus
import Bus from './bus'
Vue.prototype.$bus = Bus
2、在A组件中使用bus向B组件通信
this.$bus.$emit('write'(名称),10(传递参数))
3、B组件接收A组件传递的消息
this.$bus.$on('write',(e)=>{
console.log(e) //10
})
一般来说接收消息的方法会在created或者mounted中调用。
坑:例如在导航栏中添加一个选择列表,并且选中列表中的数据后会与A组件或者B组件通信,当我们第一次选择后,A组件会监听一次通信,当我们切换组件到B,然后在切换到A时,如果这个时候再次选择列表中的数据,会发现A组件会两次相同的接收通信,如果再次切换到B组件,再切换到A组件,并且再次调用方法,会发现A组件会三次相同的接收通信
解决方法:在组件下次触发$on
之前,用$off
取消下绑定
通常绑定在钩子函数beforeDestroy()
或者destroyed()
中,如果使用了keep-alive包裹,可以写在deactivated
钩子函数中。
beforeDestroy() {
this.$bus.$off('write')
},