Vue组件间通信:$emit与Event Bus实践解析
版权申诉
60 浏览量
更新于2024-09-12
收藏 209KB PDF 举报
"这篇教程介绍了Vue.js中组件之间的事件触发机制,主要讲解了$emit的使用以及如何通过event Bus($on)实现跨组件通信。在实际项目中,当需要组件间进行复杂的数据交互时,这些技术是至关重要的。"
Vue.js的组件通信是其核心特性之一,它允许开发者构建复杂的UI结构。在这个场景中,我们有新增按钮组件和操作按钮组合组件,它们都需要在改变列表数据后实时更新列表。Vue提供了两种主要的方式来实现这一目标:父子组件间的事件触发($emit)和跨组件通信的event Bus($on)。
1. **$emit的使用**:
- 在子组件中,当某个事件发生(如点击按钮),可以使用`this.$emit`来触发一个自定义事件。例如,在子组件中定义一个`cancelCU`方法:
```javascript
cancelCU() {
this.dialogVisible = false;
this.$emit('closeAdd');
}
```
- 在父组件模板中,通过在子组件上监听`@closeAdd`事件,可以指定一个处理函数,如`closeAddClick`:
```html
<child-component @closeAdd="closeAddClick" />
```
父组件中定义`closeAddClick`来处理子组件传来的事件。
2. **跨组件通信:event Bus**:
当需要孙子组件触发父组件,甚至更高层级组件的事件时,直接使用$emit可能变得复杂。这时,我们可以利用event Bus(事件总线)来实现跨组件通信。
- 首先,创建一个全局的event Bus实例,如`bus.js`:
```javascript
import Vue from 'vue';
export default new Vue();
```
- 然后,在需要发送事件的孙子组件中引入并使用`Bus`:
```javascript
import Bus from 'common/js/bus.js';
addCart(event) {
Bus.$emit('getTarget', event.target);
}
```
- 接收事件的爷爷组件中,需要在生命周期钩子(如`created`或`mounted`)中注册监听事件:
```javascript
import Bus from 'common/js/bus.js';
created() {
Bus.$on('getTarget', target => {
// 处理接收到的事件
});
}
```
通过Bus,孙子组件可以触发一个事件,而不论距离多远的组件都可以监听并响应这个事件,从而实现跨组件的通信。
理解并熟练运用$emit和event Bus是成为中级Vue开发者的重要步骤。在实际开发中,根据项目的复杂性选择合适的通信方式,既能保持代码的清晰性,也能提高组件的复用性和可维护性。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-09-07 上传
2020-10-16 上传
2020-11-20 上传
点击了解资源详情
点击了解资源详情
2020-12-28 上传
weixin_38733733
- 粉丝: 6
- 资源: 917
最新资源
- MCP C#试用试题
- nutch初学入门 非常好的入门教程
- c#面试题 网络转载 不错 经典
- C#设计模式大全 好书
- Struts+Spring+Hibernate整合教程.pdf
- BP神经网络原理及仿真实例
- 使用简介POWERPLAY
- Oracle 9i10g编程艺术
- scm手把手开发文档
- Cognos Impromptu
- LoadRunner安装手册.pdf
- cognos 部署 文档
- 用C语言进行单片机程序设计与应用
- Direct3D.ShaderX.-.Vertex.and.Pixel.Shader.Tips.and.Tricks.pdf
- 《uVision2入门教程》.pdf
- spring1.2申明式事务.txt