探索 Vue 中的 bus.$emit:实现组件通信的强大工具

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》
文章目录
- 一、引言
- 介绍`bus.$emit`的作用和重要性
- 二、`bus.$emit`的基本概念
- 解释`bus.$emit`是什么
- 三、使用`bus.$emit`实现组件通信
- 示例:通过`bus.$emit`在不同组件之间传递消息
- 解释如何在父组件和子组件之间使用`bus.$emit`进行通信
- 探讨`bus.$emit`的适用场景
一、引言
介绍bus.$emit的作用和重要性
bus.$emit是 Vue 中的一个全局方法,用于在 Vue 实例之间进行事件传递和通信。
它的作用是在一个组件中触发一个事件,并将事件传递给其他监听该事件的组件。
bus.$emit的重要性体现在以下几个方面:
-
实现组件通信:在 Vue 中,组件之间通常是独立的,无法直接访问彼此的状态或方法。通过使用
bus.$emit,我们可以在不同的组件之间传递事件,从而实现组件通信。 -
解耦组件:使用
bus.$emit可以避免在组件之间直接依赖和耦合。组件只需要监听感兴趣的事件,并在事件发生时做出相应的反应,而无需关心事件的来源和具体实现。 -
可复用性:通过将事件和事件监听器抽象到一个全局的
bus对象中,可以提高代码的可复用性。不同的组件可以共享同一个bus,并在需要时进行通信,避免了重复实现和代码冗余。 -
状态管理:
bus.$emit可以用于在不同的组件之间共享状态和数据。通过在bus上发布事件并携带相关的数据,其他组件可以监听并更新自己的状态,从而实现状态的同步和共享。

总的来说,bus.$emit是 Vue 中实现组件通信和状态管理的重要工具,它提供了一种灵活、解耦和可复用的方式,使得组件之间可以进行有效的通信和协作,提高了代码的可维护性和扩展性。
二、bus.$emit的基本概念
解释bus.$emit是什么
bus.$emit是 Vue 中的一个全局方法,用于在 Vue 实例之间进行事件传递和通信。
具体来说,bus.$emit可以在一个 Vue 实例中触发一个事件,并将事件传递给其他监听该事件的 Vue 实例。这个bus对象是一个全局的 Vue 实例,可以在不同的 Vue 组件之间共享和使用。
在使用bus.$emit时,需要指定要触发的事件名称和相关的参数。其他监听该事件的 Vue 实例会接收到这个事件,并根据事件名称和参数执行相应的逻辑。
例如,假设有两个 Vue 组件 A 和 B,它们都监听了全局bus上的一个事件updateData。当 A 组件使用bus.$emit('updateData', {data: 'new data'})触发该事件时,B 组件会接收到这个事件,并根据携带的参数{data: 'new data'}执行相应的逻辑。
通过使用bus.$emit,不同的 Vue 组件可以进行通信和协作,而无需直接依赖和耦合。这有助于提高代码的可维护性和可扩展性,使不同的组件能够独立地开发和测试。
需要注意的是,在实际开发中,应该根据具体的需求和场景来合理使用bus.$emit,避免过度使用导致代码复杂度增加和难以维护。同时,也应该注意处理事件监听器的生命周期和清理,以避免潜在的内存泄漏问题。
三、使用bus.$emit实现组件通信
示例:通过bus.$emit在不同组件之间传递消息
以下是一个简单的示例,演示如何通过bus.$emit在不同的 Vue 组件之间传递消息:
假设有两个 Vue 组件ComponentA和ComponentB,它们都监听了全局bus上的一个事件updateData。
<template><div><button @click="emitUpdateData">Click me to emit event</button></div>
</template><script>
import { bus } from './bus'export default {methods: {emitUpdateData() {bus.$emit('updateData', { data: 'new data' })}}
}
</script>
<template><div>{{ data }}</div>
</template><script>
import { bus } from './bus'export default {data() {return {data: ''}},created() {bus.$on('updateData', function(data) {this.data = data.data})}
}
</script>
在上面的示例中,ComponentA有一个按钮,点击它会触发一个事件,并将携带的数据传递给bus。ComponentB监听了这个事件,并在接收到数据后更新自己的data属性。
需要注意的是,这只是一个简单的示例,实际应用中可能需要处理更多的情况和逻辑。同时,为了提高代码的可维护性和可读性,建议在实际项目中使用命名空间来区分不同的事件,避免事件名称冲突。
解释如何在父组件和子组件之间使用bus.$emit进行通信
在 Vue 中,父子组件之间可以通过 props 和 events 进行通信。
然而,当需要在多个不相关的组件之间进行通信时,使用bus.$emit可以提供一种更灵活的方式。
以下是在父组件和子组件之间使用
bus.$emit进行通信的步骤:
-
创建一个全局的
bus对象:在 Vue 实例之外创建一个
bus对象,以便在不同的组件之间共享和使用。const bus = new Vue() -
在父组件中触发事件:
在父组件中,使用
bus.$emit方法触发一个事件,并传递相关的数据。例如:methods: {emitMessage: function(message) {bus.$emit('message', message)} } -
在子组件中监听事件:
在子组件中,使用
bus.$on方法监听特定的事件,并在接收到事件时执行相应的逻辑。例如:created() {bus.$on('message', function(message) {// 处理接收到的消息}) } -
处理接收到的消息:
在子组件的
message事件监听器中,可以根据接收到的消息执行相应的逻辑。例如,更新组件的状态或触发其他操作。
通过这种方式,父组件可以在任何时候触发一个事件,并将消息传递给所有监听该事件的子组件。子组件可以根据接收到的消息进行相应的处理,而无需直接依赖于父组件的状态或方法。
需要注意的是,bus.$emit和bus.$on方法应该在组件的生命周期方法(如created或mounted)中进行注册和监听,以确保在组件实例创建后能够正确地接收到事件。同时,为了避免内存泄漏,在组件销毁时应及时注销事件监听器。
探讨bus.$emit的适用场景
bus.$emit在 Vue 中是一个用于在不同组件之间进行通信和传递事件的方法。
适用场景包括:
-
跨组件通信:当需要在多个不相关的组件之间进行通信和数据共享时,可以使用
bus.$emit来发布事件并传递数据。 -
状态共享:在需要在多个组件之间共享状态或数据的情况下,可以通过
bus.$emit发布事件来更新其他监听该事件的组件的状态。 -
可组合的组件:当开发可组合的组件库或构建可复用的组件时,使用
bus.$emit可以提供一种通用的通信方式,使得不同的组件可以灵活地进行组合和交互。

需要注意的是,过度使用bus.$emit可能会导致代码的复杂性增加和难以维护。因此,在使用bus.$emit时,应根据具体的需求和场景进行权衡,并考虑其他可能更适合的通信方式,如 props、Vuex 等。
相关文章:
探索 Vue 中的 bus.$emit:实现组件通信的强大工具
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
2017年五一杯数学建模A题公交车排班问题解题全过程文档及程序
2017年五一杯数学建模 A题 公交车排班问题 原题再现 随着徐州市经济的快速发展,公交车系统对于人们的出行扮演着越来越重要的角色。在公交车资源有限的情况下,合理的编排公交车的行车计划成为公交公司亟待解决的问题。以下给出公交车排班问题中的部分名…...
【c++】——类和对象(下) ——内存管理
作者:chlorine 专栏:c专栏 目录 💻 C/C内存分布 💻C语言中动态内存管理方式:malloc/calloc/realloc/free 编辑 💻C内存管理方式 👉new/delete操作内置类型 👉new和delete操作自定义类型 …...
大数据平台/大数据技术与原理-实验报告--部署全分布模式Hadoop集群
实验名称 部署全分布模式Hadoop集群 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.10.16-2023.10.20 实验仪器设备以及实验软硬件要求 专业实验室(配有cen…...
Android Gradle 升级到7.x及Maven推送问题
7.0以下的Android插件工程使用Maven上传时脚本如下所示。 plugins {id com.android.libraryid kotlin-androidid maven }// 源代码一起打包 task androidSourcesJar(type: Jar) {archiveClassifier.set(sources)from android.sourceSets.main.java.sourceFiles }uploadArchive…...
【实战】K8S Helm部署Redis Cluster Redisinsight
文章目录 前言部署Redis Cluster安装Redis Insight写在最后 前言 在Web服务的开发过程中,Redis一直以来都有着举足轻重的作用。基本上所有的后端服务都会用这个中间件实现具体的业务场景,比如常作为系统缓存、分布式锁,也可以实现排名、定位…...
3.前端--HTML标签-文本图像链接【2023.11.25】
1.HTML常用标签(文本图像链接) 文本标签 标题 <h1> - <h6> 段落<p> 我是一个段落标签 </p> 换行 <br /> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta ht…...
ctfshow刷题web入门--1--ljcsd
文章目录 ctf.show。信息搜集web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20。爆破。知识1.1 播种随机数生成器-mt_srand。参考web21--重点web22--做不出来web23web24web25web26web27web28。。。命令执行。知识1 绕过正则表达式…...
乘法原理 LeetCode 828. 统计子串中的唯一字符
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。 例如:s "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,…...
python桌面开发PyQt6库和工具库QTDesigner安装和配置
一、安装PyQt6 二、安装pyqt6-tools 三、安装外部工具 四、创建QTDesigner 1.首先查找designer.exe的路径(可以自己在窗口中选择,也可以使用Everything搜索) 2.使用Everything搜索后会出现多个designer.exe,选中,OpenPath 3.选择…...
火柴棒等式
枚举 只要在保证等式正确的基础上判断火柴棒有没有用完就可以 因为数比较小,而且我不知道最大的等式中的数是多少,索性就设置为999了 还好对效率要求不大(doge) 要不然就得自己慢慢改最大数来试了 代码如下: #in…...
给定两个字符串 s 和 t ,找不同
题意: 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s “abcd”, t “abcde” 输出:“e”…...
从权限跳转看Activity的data android:scheme
在应用申请悬浮窗权限的时候,可以跳转到相应的设置界面,并且自动切换到应用的条目,高亮显示一下, android悬浮窗权限怎么申请 在Android中,要申请悬浮窗权限,需要以下步骤: 在 AndroidManifes…...
C++ Qt QFile用法介绍与代码演示
作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 打开和关闭文件读取文件写入文件示例代码自定义格式文件解析在Qt 中 QFile 的类用于读写本地文件系统中的文件。它继承自 QIODevice,所以它包含了许多用于数据输入和输出的功…...
Redis面试题:Redis的数据过期策略有哪些?
目录 面试官:Redis的数据过期策略有哪些 ? 惰性删除 定期删除 面试官:Redis的数据过期策略有哪些 ? 候选人: 嗯~,在redis中提供了两种数据过期删除策略 第一种是惰性删除,在设置该key过期时间后,我们…...
1.2.1 C语言结构体初始化方法总结
文章目录 结构体定义通用定义注册事项结构体初始化方法一简述示例方法二简述示例方法三简述示例方法四简述示例方法五简述示例结构体定义 通用定义 常用的结构体定义,有2种形式, 一种是关键字struct 结构体形式,如下...
CentOS 7 安装 Weblogic 14 版本
安装JDK程序 注意:安装weblogic前,先安装JDK!(要求jdk(1.7以上)): 一、创建用户组weblogic及用户weblogic groupadd weblogic useradd -g weblogic weblogic二、将下载好的jdk及weblogic上传至/home/webl…...
ES之x-pack-core-7.14.2许可证修改为白金版
X-Pack是什么 X-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。 主要分一下步…...
在Ubuntu18.04安装适合jdk8的eclipse
直接在Ubuntu软件那里下载的eclipse不能用,下载后启动会报错:Eclipse An error has occurred. See the log file/home/hadoop/.eclipse/ org.eclipse.platform_3.8_155965261/ configuration/1700567835954.log 上网搜索方法,按教程说的修改e…...
openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)
先抛效果图,该区域有很多个小面 之前在网上搜到的方式实现 Openlayers 为目标范围以外的区域添加遮罩 - 知乎 核心代码如下,如果您不需要兼容全国的所有省市,而刚好要加地区又是连贯的区域的话,该方法可行,但是如果需要兼容全国…...
**发散创新:基于Python的提示注入防御机制实战解析**在当前大模型广泛应用的时代,**提示注入(Promp
发散创新:基于Python的提示注入防御机制实战解析 在当前大模型广泛应用的时代,提示注入(Prompt Injection) 已成为不可忽视的安全风险。无论是API调用、Web应用集成还是本地部署的LLM服务,都可能因恶意构造输入而触发…...
2026届最火的五大AI论文工具横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 借助人工智能来辅助撰写开题报告,可显著提高研究框架构建的效率,在用…...
FDTD实战:TFSF全场散射场光源的斜入射仿真与边界条件精解
1. TFSF光源与斜入射仿真的核心概念 第一次接触FDTD仿真时,我被各种光源类型搞得头晕眼花。直到实际用TFSF(Total Field Scattered Field)光源做了几个纳米颗粒散射案例,才发现这简直是处理散射问题的"瑞士军刀"。简单来…...
intv_ai_mk11惊艳案例集:用‘先定义再举例最后总结’结构输出机器学习核心概念
intv_ai_mk11惊艳案例集:用"先定义再举例最后总结"结构输出机器学习核心概念 1. 什么是机器学习? 机器学习是人工智能的一个分支,它让计算机能够从数据中学习规律,而无需被明确编程。就像教小孩认动物一样,…...
Z-Image-Turbo-rinaiqiao-huiyewunv 企业级部署架构设计:保障高可用与弹性伸缩
Z-Image-Turbo-rinaiqiao-huiyewunv 企业级部署架构设计:保障高可用与弹性伸缩 最近和几个做电商内容的朋友聊天,他们都在头疼一件事:自家的AI图片生成服务一到促销季就卡顿,要么排队等半天,要么直接报错。用户投诉多…...
【大模型工程化能效优化黄金法则】:20年实战总结的7大降耗策略,省电37%实测数据首次公开
第一章:大模型工程化中的能效优化策略 2026奇点智能技术大会(https://ml-summit.org) 大模型推理与训练的能耗问题已不再仅是运维成本考量,而是关乎碳中和承诺、边缘部署可行性及长期服务SLA稳定性的核心工程约束。在千卡级集群与百亿参数模型常态化落地…...
【ENSP实战】VLAN间通信的VLANIF三层路由配置详解(HCIA)
1. 为什么需要VLAN间通信? 在企业网络中,不同部门往往需要划分到不同的VLAN中。比如财务部在VLAN 10,市场部在VLAN 20,这是为了安全和管理方便。但问题来了:财务部有时候需要和市场部共享文件,这时候就需要…...
Docker里Redis突然变‘哑巴’?手把手教你排查并修复‘READONLY replica’写入异常
Docker环境下Redis突发"READONLY"写入异常的深度排查指南 Redis作为现代应用架构中的核心组件,其稳定性直接影响业务连续性。但在Docker化部署场景中,Redis实例可能毫无征兆地"失声"——当应用尝试写入时突然返回"READONLY You…...
DLSS文件管理革命:5分钟让每款游戏都获得最佳画质优化
DLSS文件管理革命:5分钟让每款游戏都获得最佳画质优化 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为游戏玩家设计的智能DLSS文件管理工具,能够自动扫描游戏库、识别DLS…...
CSRNet-PyTorch复现实战:从零搭建人群计数模型
1. 人群计数与CSRNet基础认知 第一次接触人群计数任务时,我盯着监控画面里密密麻麻的人头直发懵。传统方法需要人工标注每个行人位置,效率低下且容易出错。而CSRNet这类深度学习模型,只需要输入监控图像,就能自动输出人群密度图和…...
