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

news/2024/11/16 12:01:22/

前言: 

      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),//定义全局事件总线 $busbeforeCreate:function(){Vue.prototype.$bus=this;}
})

  三:绑定自定义事件

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

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

  四:触发自定义事件

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

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

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


  五:解绑自定义事件

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

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


http://www.ppmy.cn/news/41.html

相关文章

Python写了个疫情信息快速查看工具

年关将至,大家对疫情的关注度也愈发提升,本次使用PyQt5撰写100行代码写一个疫情信息快速查看工具。 一.准备工作 1.PyQt5 PyQt 是一个用于创建GUI应用程序的跨平台的工具包,它将Python编程语言和Qt库 成功融合在一起。QT库目前…

HTML5期末考核大作业 基于HTML+CSS+JavaScript仿王者荣耀首页 游戏网站开发 游戏官网设计与实现

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Spark学习(6)-Spark SQL

1 快速入门 SparkSQL是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是非常成熟的 海量结构化数据处理框架. 学习SparkSQL主要在2个点: SparkSQL本身十分优秀, 支持SQL语言\性能强\可以自动优化\API简单\兼容HIVE等等。企业大面积在使用SparkSQL处理业务数据。 离线开…

http和dubbo接口调用主动设置超时时间

http接口超时方案 方案1:多个resttemplate,不同超时时间的使用不同的template,优点:简单,扩展起来复制粘贴,缺点:代码冗余,多个template占用内存不够优雅 方案2:单个res…

深度学习day01

Marchine leariing 机器学习就是自动找函式 告诉机器要找的函式用 Supervised Learning 函式的Loss ——评价函式的好坏 Reinforcement就是让机器自己下象棋,输赢自己尝试,没像监督学习那样有人为规定 给函式寻找范围: 函式寻找方法——…

基于单RGB相机的全新三维表示方法|NeurIPS 2022

随着深度学习的发展,基于单张RGB图像的人体三维重建取得了持续进展。 但基于现有的表示方法,如参数化模型、体素栅格、三角网格和隐式神经表示,难以构筑兼顾高质量结果和实时速度的系统。 针对上述问题,天津大学团队联合清华大学…

Spire.XLS for Java 12.11.8 Excel to PDF bug Fix

谷歌找破解版Spire.XLS for Java is a professional Java Excel API that enables developers to create, manage, manipulate, convert and print Excel worksheets without using Microsoft Office or Microsoft Excel. Spire.XLS for Java supports both for the old Excel …

《WEB前端框架开发技术》HTML5响应式旅游景区网站——榆林子州HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…