Vue组件间通信:兄弟组件间通信
2013 年 3 月 24 日
eventBus
又称为事件总线,在vue中可以使用它来作为沟通桥梁, 就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件, 所有组件都可以通知其他组件。
那么,在Vue的项目中怎么使用 eventBus
来实现组件之间的数据通信呢?具体通过下面几个步骤:
1. 初始化
首先需要创建一个事件总线并将其导出, 以便其他模块可以使用或者监听它。
我们在src/components/目录下新建文件bus.js。
import Vue from 'vue' export default new Vue()
2. 发送事件
假设你有两个兄弟组件: ComA和ComB,ComA发送消息给ComB。
ComA这样:
import bus from './bus' export default { name: 'comA', data () { return { } }, methods: { sendMsg() { bus.$emit('fromA', { phone: 13800138000 }) } } }
很显然,ComA中使用 bus.$emit(事件名,数据);
向事件中心注册发送事件。
3. 接收事件
ComB接受ComA发送过来的消息。
{{fromA}}import bus from './bus' export default { name: 'comB', data () { return { fromA: '', } }, mounted() { bus.$on('fromA', param => { this.fromA = param.phone; }) } }
于是,当ComA发送了一个手机号码phone给ComB时,comB就会接收并显示。
父组件
在父组件中调用ComA和ComB两个兄弟组件。
import ComA from './ComA.vue' import ComB from './ComB.vue' export default { components: { ComA, ComB }, }
更多效果请看demo演示。
注意,eventBus也有不方便之处, 当项目较大,维护起来就相当困难,这时我们应该用到Vuex状态管理来解决。本站后面有文章给大家讲解vuex组件状态管理。