Vue2.0子组件同级通信:使用事件总线eventBus
94 浏览量
更新于2024-09-01
收藏 231KB PDF 举报
"Vue2.0子同级组件之间数据交互方法主要依赖于事件总线(event bus)实现,通过创建一个新的Vue实例作为通信桥梁。在发送数据的组件中使用$emit触发自定义事件,接收数据的组件则通过$on监听相应事件。这种通信方式适用于同级或非父子关系的组件间通信。"
在Vue2.0中,当两个子组件处于同级且没有直接的父子关系时,它们之间的数据交互通常不通过props直接传递,而是利用事件系统来实现。这里介绍的方法是通过创建一个中央事件总线(event bus),使得组件能够通过事件进行通信。
1. 创建中央事件总线
首先,在项目的`src/assets`目录下创建`eventBus.js`文件,内容为创建一个新的Vue实例,例如:
```javascript
import Vue from 'vue';
export default new Vue();
```
这个新的Vue实例将作为一个全局的对象,用于组件间的通信。
2. 发送数据
在需要发送数据的组件中(例如`firstChild`组件),引入`eventBus`,然后在某个事件(如按钮点击)中使用`$emit`方法触发自定义事件,并传递数据:
```javascript
methods: {
sendMsg() {
this.$eventBus.$emit('userDefinedEvent', '这是要传递的数据');
}
}
```
在这里,`$emit`方法用于触发事件`userDefinedEvent`,并将字符串参数传递给监听该事件的组件。
3. 接收数据
在接收数据的组件(如`secondChild`组件)中,同样引入`eventBus`,并在`mounted`生命周期钩子中使用`$on`方法监听自定义事件:
```javascript
mounted() {
this.$eventBus.$on('userDefinedEvent', (data) => {
console.log('接收到的数据:', data);
// 更新组件状态或者显示数据
});
}
```
`$on`方法用于监听事件`userDefinedEvent`,当事件触发时,回调函数会接收到传递的数据,并进行相应的处理。
4. 在父组件中注册子组件
在父组件(如`App.vue`)中,分别注册`firstChild`和`secondChild`组件,并在模板中插入对应的标签,使它们在页面上呈现。
通过这种方式,两个同级组件就可以实现数据的传递,而无需依赖父组件或使用复杂的Vuex状态管理。然而,这种方法仅适用于简单场景,如果应用变得复杂,推荐使用Vuex来集中管理组件间共享的状态,以保持代码的可维护性和可扩展性。
总结:Vue2.0中,子同级组件间的通信主要通过事件总线(event bus)实现,通过创建一个独立的Vue实例作为通信媒介,组件通过触发和监听自定义事件来传递和接收数据。这种方法简洁易懂,适用于轻量级的数据交互需求。但随着应用规模扩大,考虑使用Vuex等状态管理工具会更合适。
2019-10-30 上传
2022-05-08 上传
点击了解资源详情
2020-11-29 上传
2020-08-28 上传
2021-01-19 上传
2020-08-31 上传
2020-08-29 上传
2020-08-29 上传
weixin_38545485
- 粉丝: 5
- 资源: 982
最新资源
- 屏幕取色工具-易语言
- Python库 | outjack-5-py2.py3-none-any.whl
- EvilOne.t077cvspr0.gahllLA
- Algorithms-Princeton:Coursera课程跟踪
- claudio-page:在线门户在线做克劳迪奥·比加(Claudio Higa)
- week13_day2_annotations_hw
- 行业分类-设备装置-可降解快递单贴标纸用改性母粒造粒系统.zip
- maxq1050_usb-hid例程代码.rar
- Hacking-the-Pentest-Tutor-Game
- apache_beam-python:有关使用Apache Beam和Python进行批处理数据并行处理的演示项目
- javascript_avance
- Python库 | outcome_devkit-6.4.1-py3-none-any.whl
- elasticsearch-batch
- CSCI181AA:整个学期软件项目的资料库
- 行业分类-设备装置-同时数据传输服务方法以及应用了该方法的装置.zip
- sakshi-2100.github.io