vue组件之间的通信有很多种方式,比如props、$emit、$ref、provide/inject、$parent/$children、$root、vuex、$attrs/$listeners等,是相对适用在各个场景下使用的。进入重点是讲EventBus(事件总线),这种方式既简单也方便、同时适用于各个应用场景,但是唯一要注意的是如果是多人团队开发一个项目的话,都使用这种方式需要注意重复覆盖问题。它允许两个子组件之间直接通讯,而不需要涉及父组件,由于中继方式比较简单,这里不做赘述,只讲EventBus方式。

EventBus具体实现

1、首先在main.js文件中定义一个新的bus对象并且挂载在原型链上,其实他是一个全新的vue实例

1
Vue.prototype.$bus = new Vue()

2、组件a.js中,声明并监听事件busEvent

1
2
3
4
5
created(){
this.$bus.$on('busEvent', res=>{
console.log(res) // 得到一个字符或一个对象或一个数组,
})
}

3、组件 b.js 中,触发$bus中的busEvent

1
2
3
4
5
6
7
methods:{
bAction(){
this.$bus.$emit('busEvent', 'abc')
// this.$bus.$emit('busEvent', {a:1, b: 2, c: 3}) // 对象
// this.$bus.$emit('busEvent', [1,2,3,4]) // 数组
}
}