Vue组件间通信:$emit与Event Bus实践解析
版权申诉
135 浏览量
更新于2024-09-12
收藏 209KB PDF 举报
"本文主要介绍了Vue框架中组件间通信的两种常见方式:$emit和event Bus。通过实例展示了如何使用$emit实现父子组件间的通信,以及如何利用event Bus实现实现跨级或非父子关系组件之间的事件传递。"
在Vue.js中,组件间的通信是应用开发中的关键部分。本文主要探讨了两种通信方式:一是使用内置的`$emit`方法进行父子组件通信,二是通过event Bus实现任意组件间的通信。
首先,我们来看`$emit`的用法。`$emit`主要用于子组件向其父组件发送事件。例如,在子组件中,我们可以定义一个点击事件处理函数,如`cancelCU()`:
```javascript
cancelCU() {
this.dialogVisible = false;
this.$emit('closeAdd');
}
```
当这个函数被调用时,它会触发一个名为`closeAdd`的自定义事件,并可以传递数据。父组件在模板中引用子组件时,可以监听这个事件并绑定相应的处理函数:
```html
<child-component @closeAdd="closeAddClick"></child-component>
```
在父组件的JavaScript中,定义`closeAddClick`函数以响应子组件的事件:
```javascript
methods: {
closeAddClick() {
// 执行相关操作
}
}
```
然而,当需要孙子组件与祖父组件通信,或者两个没有直接父子关系的组件之间通信时,`$emit`就无法直接胜任了。这时,我们可以使用event Bus(事件总线)来实现跨组件通信。event Bus是一种轻量级的事件系统,基于Vue实例创建。
创建event Bus的步骤如下:
1. 首先,创建一个新的Vue实例,作为事件总线:
```javascript
// bus.js
import Vue from 'vue';
export default new Vue();
```
2. 在需要发送事件的孙子组件中,导入并使用event Bus:
```javascript
import Bus from './common/js/bus.js';
// 在事件触发的地方
addCart(event) {
Bus.$emit('getTarget', event.target);
}
```
3. 接收事件的祖父组件(或其他任何组件)中,也需要导入event Bus,并在其生命周期钩子(如`created`)中监听事件:
```javascript
import Bus from './common/js/bus.js';
created() {
Bus.$on('getTarget', target => {
// 在这里处理接收到的事件和数据
});
}
```
通过这种方式,孙子组件可以向任何其他组件发送事件,而不仅仅是它的父组件。这种方式在组件层级关系复杂时非常有用,但需要注意的是,event Bus可能导致代码之间的耦合性增加,因此在大型项目中可能需要更复杂的通信机制,如Vuex状态管理。
总结来说,Vue组件间的事件通信是通过`$emit`和event Bus实现的。`$emit`适用于父子组件的直接通信,而event Bus则用于解决跨级或非父子关系组件之间的通信问题。理解并熟练掌握这两种通信方式,对于编写高效、可维护的Vue应用至关重要。
3707 浏览量
1945 浏览量
268 浏览量
771 浏览量
137 浏览量
2535 浏览量
4703 浏览量
111 浏览量
11445 浏览量
weixin_38687199
- 粉丝: 4
- 资源: 924
最新资源
- BuildNotifications:掌握所有CI管道。 具有出色的构建通知
- LowT3DeathProbabilityCalculator:该应用程序负责入住ICU的患者的颅骨死亡可能性
- AD9287开发板gerber文件.zip
- MineBattle:插入
- 绿色图表打包下载PPT模板
- 行业文档-设计装置-自航式合成孔径声呐平台.zip
- 怪兽龟
- jdk8-311-own-green.zip
- 闪闪发光:轻量级扩展语言
- 时光科技注塑机电液伺服控制系统选型手册.rar
- CIS106-Oleksa-Ivankiv:哈珀大学课程
- 六张3D立体图表打包下载PPT模板
- 智能计算课程作业:粒子群优化算法,遗传算法,蚁群算法
- 星空音视频解码包 StarCodec 20210414 免费版下载.zip
- storyscript, 用于表示AVG故事的脚本系统,AVG.js的DSL.zip
- TP-最终-Seminario-Python:Trabajo final para lasignaturea'Seminario de Lenguaje-Python'de Facultad deInformáticade UNLP