Vue2 中使用“全局事件总线“实现任意组件间通信

news2025/1/12 12:17:28

前言: 

      vue 中组件间通信的方式有很多 ------ 父传子propos,全局事件总线,消息订阅,vuex......等等,这篇文章带大家学习一下通过全局事件总线来实现任意组件间的通信。

文章目录:

 一:什么是全局事件总线 

组件C向组件A传递数据图解

 二:全局事件总线怎么创建 

  三:绑定自定义事件

  四:触发自定义事件

  五:解绑自定义事件


 一:什么是全局事件总线 

全局事件总线 其实就是一个中间人,组件与组件之间的通信需要借助于这个中间人,在一个组件中向其绑定自定义事件,然后在另一个组件触发向全局事件总线中绑定的这个自定义事件并传递值,进而实现通信。我们可以通过下面的一个图来粗略解释什么是全局事件总线


组件C向组件A传递数据:

  • 首先组件A向全局事件总线绑定另一个自定义事件,并定义了当这个事件do被触发时要执行的回调函数
  • 然后由组件C去触发全局事件总线中的自定义事件do,并向其回调中传递数据
  • 这样就实现了组件C去触发事件并传递数据,组件A去定义事件并接受数据


 二:全局事件总线怎么创建 

上一版块我们知道了全局事件总线就是一个处于任何组件都访问得到的中间媒介,既然要让所有组件都访问得到,那我们就要转换思路,即让 vc 或者 vm 访问得到:


在 vue 文件的 main.js 入口函数中的 beforeCreate 钩子中创建:

$bus 就是我们的全局事件总线,其定义并赋值后就是 vm,可以访问 vue 原型对中的所有方法,这就包含了绑定的方法 $on,触发的方法 $emit,解绑的方法 $off

new Vue({
  el:'#app',
  render: h => h(App),
  //定义全局事件总线 $bus
  beforeCreate:function(){
      Vue.prototype.$bus=this;
  }
})

  三:绑定自定义事件

创建过全局事件总线后,就可以开始绑定自定义事件了,使用 $on 绑定自定义事件,绑定要写在 mounted 钩子中,后面为其触发时执行的回调。

//A组件
export default {
   name:'componentA',
   data() {
    return {}
   },
   mounted(){
      this.$bus.$on('do',(data)=>{    //为全局事件总线绑定自定义事件do
         console.log('我收到了B组件传来的姓名:',data);
      })
   }
}

  四:触发自定义事件

绑定过后就可以在另一个组件中触发了,触发使用的是 $emit,触发并将后面的值传给自定义事件被触发时执行的回调

//组件B
export default {
    name:'componentB',
    data() {
        return {
            name:'张三'
        }
    },
    methods:{
        get:function(){  //在该组件的模板中添加一个按钮点击执行该函数 get
            this.$bus.$emit('do',this.name)   //触发自定义事件do
        },
  }
}

 成功实现任意组件间传递数据


  五:解绑自定义事件

vue 实例总将被销毁,那么我们就要在实例销毁前解绑自定义事件,这就要和绑定自定义事件同级书写,即写在 beforeDestroy 钩子中,使用 $off 解绑

//A组件
export default {
   name:'componentA',
   data() {
    return {}
   },
   mounted(){
      this.$bus.$on('do',(data)=>{    //为全局事件总线绑定自定义事件do
         console.log('我收到了B组件传来的姓名:',data);
      })
   },

   beforeDestroy(){
        this.$bus.$off('do')  //解绑自定义事件do
   }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

细节决定成败,Qlik数据洞察如何助力SEB化身“鹰眼”?

“随业务版图扩张,目前公司需要处理的数据集海量增长, SEB 的数据分析面临着越来越大的挑战,光是等待数据集计算的时间,都需要等待半天,效率低下导致我们很多工作都无法开展,我们需要一款更高效的 BI 工具”…

普元中间件Primeton AppServer6.5安装(Windows)

本文在Windows环境下安装普元中间件Primeton AppServer6.5(以下简称PAS) 一、安装前准备 1.1使用软件版本 Primeton_AppServer_6.5_Enterprise_Editio(Windows) 1.2安装前注意注意的点 1.需要提前安装JDK,并配置J…

神经网络和深度学习-加载数据集DataLoader

加载数据集DataLoader Dataloader的概念 dataloader的主要目标是拿出Mini-Batch这一组数据来进行训练 在处理多维特征输入这一文章中,使用diabetes这一数据集,在训练时我们使用的是所有的输入x,在梯度计算采用的是随机梯度下降&#xff08…

本地启动springboot项目失败端口问题

异常关键字: Cannot assign requested address: bind 排查结果 配置了环境变量【SERVER_ADDRESS】 网上搜了有的回答是端口占用,是不对的,端口占用的异常是这个【Web server failed to start. Port 8282 was already in use.】 排查结果…

麦芽糖-聚乙二醇-阿霉素maltose-Doxorubicin

麦芽糖-聚乙二醇-阿霉素maltose-Doxorubicin 中文名称:麦芽糖-阿霉素 英文名称:maltose-Doxorubicin 别称:阿霉素修饰麦芽糖,阿霉素-麦芽糖 还可以提供PEG接枝修饰麦芽糖,麦芽糖-聚乙二醇-阿霉素,Doxorubicin-PEG-…

无线传感器网络:定位、安全与同步

文章目录LocalizationRanging TechniquesReceived Signal Strength (RSS)Time of Arrival (ToA)Time Difference of Arrival (TDoA)Angle of Arrival (AoA)Range-Based Localization ProtocolsTriangulationTrilaterationIterative and Collaborative MultilaterationSecurityC…

sipp: bind_local;watchdog timer trip

文章目录作为服务端时,source ip 随机的问题命令示例bind_localwatchdog_minor_maxtriggers作为服务端时,source ip 随机的问题 https://sipp.sourceforge.net/doc/reference.html https://github.com/SIPp/sipp/issues/83 https://github.com/SIPp/sip…

GC2是什么工具

GC2是一款功能强大的命令控制应用工具,该工具将允许广大安全研究人员或渗透测试人员使用Google Sheet来在目标设备上执行远程控制命令,并使用Google Drive来提取目标设备中的敏感数据。 值得一提的是,该工具可以直接提供命令控制服务&#x…

[附源码]计算机毕业设计springboot高校社团管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

功率放大器的类型和特点是什么(功率放大器使用注意事项有哪些)

放大器一般泛指放大某物的装置,应用在音频、电子等领域。在包括音频功率放大器在内的电路里,各种信号都可以是电信号来进行交换。功率放大器主要是放大电路中流动信号,可以放大输入的电压或者电流。它的作用是放大各种传感器输出电信号&#…

架设好传奇登录器显示无法连接服务器,完美登录器使用常见问题解决办法

中国传奇网已经更新好了完美登陆器,已经可以下载了,完美登陆器是一款完全免费无限制的登陆器。在这里站长也推荐大家使用这个传奇登陆器。毕竟是免费的。 一.登录器域名绑定,生成登录器等问题解决办法! 问1.完美登录器绑定域名还是绑定服务器等&#xf…

数字孪生技术栈的应用场景的优点

技术栈是一个IT术语,本意是指某项工作需要掌握的一系列技能组合的统称。那么对于如今炙手可热的数字孪生技术而言,数字孪生技术栈都会包括哪些底层技能?它又是如何构成和运行的呢? 北京智汇云舟科技有限公司成立于2012年&#xff…

太卷了,这份Java性能调优手册仅上线1小时,竟被恶意封杀下架

在各大厂的面试中,性能优化的问题肯定不会缺席,这足以说明其重要性。今天给大家带来的便是由资深程序员葛一鸣老师写的《Java程序性能优化实战》,同样是没有开源版本,我会将领取方式放在文末 Java程序性能优化实战 我看过几篇讲…

[附源码]Python计算机毕业设计Django仓库管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Rockwell EDI 855 采购订单确认报文详解

罗克韦尔自动化与国内12 家授权分销商,124 家认可的系统集成商,30多家亚太区的Encompass战略合作伙伴和全球战略联盟,共同为制造业企业提供广泛的世界一流的产品、解决方案与服务支持。 近期我们帮助客户成功与罗克韦尔Rockwell建立EDI连接&a…

自建云服务计费系统

自从Laxcus分布式操作系统正式开源两个月以来,可能是它一站式云计算平台属性和超大规模计算能力,给用户带来极大的便利,下载量一直持续增加,最近网站后台总是有用户在问,在Laxcus分布式操作系统的社区版本基础上&#…

地级市-空气流动系数数据-更新至2019(含10米风速、边界高度等)

1、数据来源:参考论文计算,详情请见指标说明 2、时间跨度:2000-2019年 3、区域范围:全国所有地级市 4、指标说明: 空气流动系数数据为环境经济学常用工具变量! 数据为复旦大学陈诗一和陈登科教授&…

vite+ts-4-ORM框架sequelize实现mysql操作

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼,常常是伪装起来的好运。 使用ORM框架sequelize完成Mysql数据库操作 使用ts实现mysql配置/泛型重载 配置接口实现 创建src/config/DbConf…

【SQL Server + MySQL三】数据库设计【ER模型+UML模型+范式】 + 数据库安全性

极其感动!!!当时学数据库的时候,没白学!! 时隔很长时间回去看数据库的笔记都能看懂,每次都靠这份笔记巩固真的是语雀分享要花钱,要不一定把笔记给贴出来(;༎ຶД༎ຶ) ,除…

SFTP的基本定义、用途以及基本优势有哪些

文件传输协议允许用户通过Internet在远程系统之间传输数据。SFTP 就是这样一种协议,它为用户提供了一种安全的方式来发送和接收文件和文件夹,目前少数虚拟主机提供商会提供这项服务。本文将介绍SFTP的基本定义、用途和数据安全方面的优势。 SFTP(Secure …