当前位置: 首页 > news >正文

探索 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的重要性体现在以下几个方面:

  1. 实现组件通信:在 Vue 中,组件之间通常是独立的,无法直接访问彼此的状态或方法。通过使用bus.$emit,我们可以在不同的组件之间传递事件,从而实现组件通信。

  2. 解耦组件:使用bus.$emit可以避免在组件之间直接依赖和耦合。组件只需要监听感兴趣的事件,并在事件发生时做出相应的反应,而无需关心事件的来源和具体实现。

  3. 可复用性:通过将事件和事件监听器抽象到一个全局的bus对象中,可以提高代码的可复用性。不同的组件可以共享同一个bus,并在需要时进行通信,避免了重复实现和代码冗余。

  4. 状态管理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 组件ComponentAComponentB,它们都监听了全局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有一个按钮,点击它会触发一个事件,并将携带的数据传递给busComponentB监听了这个事件,并在接收到数据后更新自己的data属性。

需要注意的是,这只是一个简单的示例,实际应用中可能需要处理更多的情况和逻辑。同时,为了提高代码的可维护性和可读性,建议在实际项目中使用命名空间来区分不同的事件,避免事件名称冲突。

解释如何在父组件和子组件之间使用bus.$emit进行通信

在 Vue 中,父子组件之间可以通过 props 和 events 进行通信。

然而,当需要在多个不相关的组件之间进行通信时,使用bus.$emit可以提供一种更灵活的方式。

以下是在父组件和子组件之间使用bus.$emit进行通信的步骤:

  1. 创建一个全局的bus对象:

    在 Vue 实例之外创建一个bus对象,以便在不同的组件之间共享和使用。

    const bus = new Vue()
    
  2. 在父组件中触发事件:

    在父组件中,使用bus.$emit方法触发一个事件,并传递相关的数据。例如:

    methods: {emitMessage: function(message) {bus.$emit('message', message)}
    }
    
  3. 在子组件中监听事件:

    在子组件中,使用bus.$on方法监听特定的事件,并在接收到事件时执行相应的逻辑。例如:

    created() {bus.$on('message', function(message) {// 处理接收到的消息})
    }
    
  4. 处理接收到的消息:

    在子组件的message事件监听器中,可以根据接收到的消息执行相应的逻辑。例如,更新组件的状态或触发其他操作。

通过这种方式,父组件可以在任何时候触发一个事件,并将消息传递给所有监听该事件的子组件。子组件可以根据接收到的消息进行相应的处理,而无需直接依赖于父组件的状态或方法。

需要注意的是,bus.$emitbus.$on方法应该在组件的生命周期方法(如createdmounted)中进行注册和监听,以确保在组件实例创建后能够正确地接收到事件。同时,为了避免内存泄漏,在组件销毁时应及时注销事件监听器。

探讨bus.$emit的适用场景

bus.$emit在 Vue 中是一个用于在不同组件之间进行通信和传递事件的方法。

适用场景包括:

  1. 跨组件通信:当需要在多个不相关的组件之间进行通信和数据共享时,可以使用bus.$emit来发布事件并传递数据。

  2. 状态共享:在需要在多个组件之间共享状态或数据的情况下,可以通过bus.$emit发布事件来更新其他监听该事件的组件的状态。

  3. 可组合的组件:当开发可组合的组件库或构建可复用的组件时,使用bus.$emit可以提供一种通用的通信方式,使得不同的组件可以灵活地进行组合和交互。

在这里插入图片描述

需要注意的是,过度使用bus.$emit可能会导致代码的复杂性增加和难以维护。因此,在使用bus.$emit时,应根据具体的需求和场景进行权衡,并考虑其他可能更适合的通信方式,如 props、Vuex 等。

相关文章:

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

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

2017年五一杯数学建模A题公交车排班问题解题全过程文档及程序

2017年五一杯数学建模 A题 公交车排班问题 原题再现 随着徐州市经济的快速发展&#xff0c;公交车系统对于人们的出行扮演着越来越重要的角色。在公交车资源有限的情况下&#xff0c;合理的编排公交车的行车计划成为公交公司亟待解决的问题。以下给出公交车排班问题中的部分名…...

【c++】——类和对象(下) ——内存管理

作者:chlorine 专栏:c专栏 目录 &#x1f4bb; C/C内存分布 &#x1f4bb;C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free ​编辑 &#x1f4bb;C内存管理方式 &#x1f449;new/delete操作内置类型 &#x1f449;new和delete操作自定义类型 &#x1f…...

大数据平台/大数据技术与原理-实验报告--部署全分布模式Hadoop集群

实验名称 部署全分布模式Hadoop集群 实验性质 &#xff08;必修、选修&#xff09; 必修 实验类型&#xff08;验证、设计、创新、综合&#xff09; 综合 实验课时 2 实验日期 2023.10.16-2023.10.20 实验仪器设备以及实验软硬件要求 专业实验室&#xff08;配有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服务的开发过程中&#xff0c;Redis一直以来都有着举足轻重的作用。基本上所有的后端服务都会用这个中间件实现具体的业务场景&#xff0c;比如常作为系统缓存、分布式锁&#xff0c;也可以实现排名、定位…...

3.前端--HTML标签-文本图像链接【2023.11.25】

1.HTML常用标签(文本图像链接&#xff09; 文本标签 标题 <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 中的唯一字符&#xff0c;并返回唯一字符的个数。 例如&#xff1a;s "LEETCODE" &#xff0c;则其中 "L", "T","C","O","D" 都是唯一字符&#xff0c;…...

python桌面开发PyQt6库和工具库QTDesigner安装和配置

一、安装PyQt6 二、安装pyqt6-tools 三、安装外部工具 四、创建QTDesigner 1.首先查找designer.exe的路径&#xff08;可以自己在窗口中选择&#xff0c;也可以使用Everything搜索&#xff09; 2.使用Everything搜索后会出现多个designer.exe,选中&#xff0c;OpenPath 3.选择…...

火柴棒等式

枚举 只要在保证等式正确的基础上判断火柴棒有没有用完就可以 因为数比较小&#xff0c;而且我不知道最大的等式中的数是多少&#xff0c;索性就设置为999了 还好对效率要求不大&#xff08;doge&#xff09; 要不然就得自己慢慢改最大数来试了 代码如下&#xff1a; #in…...

给定两个字符串 s 和 t ,找不同

题意&#xff1a; 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1&#xff1a; 输入&#xff1a;s “abcd”, t “abcde” 输出&#xff1a;“e”…...

从权限跳转看Activity的data android:scheme

在应用申请悬浮窗权限的时候&#xff0c;可以跳转到相应的设置界面&#xff0c;并且自动切换到应用的条目&#xff0c;高亮显示一下&#xff0c; android悬浮窗权限怎么申请 在Android中&#xff0c;要申请悬浮窗权限&#xff0c;需要以下步骤&#xff1a; 在 AndroidManifes…...

C++ Qt QFile用法介绍与代码演示

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 打开和关闭文件读取文件写入文件示例代码自定义格式文件解析在Qt 中 QFile 的类用于读写本地文件系统中的文件。它继承自 QIODevice,所以它包含了许多用于数据输入和输出的功…...

Redis面试题:Redis的数据过期策略有哪些?

目录 面试官&#xff1a;Redis的数据过期策略有哪些 ? 惰性删除 定期删除 面试官&#xff1a;Redis的数据过期策略有哪些 ? 候选人&#xff1a; 嗯~&#xff0c;在redis中提供了两种数据过期删除策略 第一种是惰性删除&#xff0c;在设置该key过期时间后&#xff0c;我们…...

1.2.1 C语言结构体初始化方法总结

文章目录 结构体定义通用定义注册事项结构体初始化方法一简述示例方法二简述示例方法三简述示例方法四简述示例方法五简述示例结构体定义 通用定义 常用的结构体定义,有2种形式, 一种是关键字struct 结构体形式,如下...

CentOS 7 安装 Weblogic 14 版本

安装JDK程序 注意&#xff1a;安装weblogic前&#xff0c;先安装JDK&#xff01;&#xff08;要求jdk(1.7以上)&#xff09;&#xff1a; 一、创建用户组weblogic及用户weblogic groupadd weblogic useradd -g weblogic weblogic二、将下载好的jdk及weblogic上传至/home/webl…...

ES之x-pack-core-7.14.2许可证修改为白金版

X-Pack是什么 X-pack是elasticsearch的一个扩展包&#xff0c;将安全&#xff0c;警告&#xff0c;监视&#xff0c;图形和报告功能捆绑在一个易于安装的软件包中&#xff0c;虽然x-pack被设计为一个无缝的工作&#xff0c;但是你可以轻松的启用或者关闭一些功能。 主要分一下步…...

在Ubuntu18.04安装适合jdk8的eclipse

直接在Ubuntu软件那里下载的eclipse不能用&#xff0c;下载后启动会报错&#xff1a;Eclipse An error has occurred. See the log file/home/hadoop/.eclipse/ org.eclipse.platform_3.8_155965261/ configuration/1700567835954.log 上网搜索方法&#xff0c;按教程说的修改e…...

openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)

先抛效果图,该区域有很多个小面 之前在网上搜到的方式实现 Openlayers 为目标范围以外的区域添加遮罩 - 知乎 核心代码如下&#xff0c;如果您不需要兼容全国的所有省市&#xff0c;而刚好要加地区又是连贯的区域的话&#xff0c;该方法可行&#xff0c;但是如果需要兼容全国…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制&#xff0c;以下是详细的总结&#xff1a; 1. 信号的保存 进程描述符&#xff08;task_struct&#xff09;&#xff1a;每个进程的PCB中包含信号相关信息。 pending信号集&#xff1a;记录已到达但未处理的信号&#xff08;未决信号&a…...

ai流式文字返回前端和php的处理办法

PHP后端 php端主要是用到ob_flush和flush&#xff0c;头改为流式。 基本代码 代码如下&#xff1a; <?php header(Content-Type:text/event-stream); header(Cache-Control:no-cache); header(Connection:keep-alive);function streamPostRequest($url,$data){$chcurl_…...