Vue组件间通信:$emit与Event Bus实践解析
版权申诉
33 浏览量
更新于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 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38733733
- 粉丝: 6
- 资源: 917
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建