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') } }
|