tnblog
首页
视频
资源
登录

vue2 事件总线。 跨组件方法调用。跨组件改变数据,跨组件执行方法

1130人阅读 2024/9/14 22:19 总访问:847667 评论:0 收藏:0 手机
分类: 前端

在Vue 2中,事件总线(Event Bus)是一种跨组件通信的常用方法,尤其是在组件之间没有直接父子关系时。事件总线本质上是一个空的Vue实例,用于触发和监听事件。这里将给出一个简单的Vue 2事件总线示例。

步骤 1: 创建事件总线

首先,你需要创建一个事件总线实例。通常,你会在一个单独的文件中做这个操作,比如 eventBus.js

eventBus.js

  1. import Vue from 'vue';
  2. export const EventBus = new Vue();

这个文件导出了一个新的Vue实例,我们将使用这个实例来触发和监听事件。

步骤 2: 触发事件

在Vue组件中,你可以使用$emit方法通过事件总线来触发事件。例如,假设我们有一个组件ComponentA,它需要在某个时刻通知其他组件。

ComponentA.vue

  1. <template>
  2. <button @click="sendMessage">Send Message</button>
  3. </template>
  4. <script>
  5. // 引入事件总线
  6. import { EventBus } from './eventBus.js';
  7. // 注入引入的路径,类似这样的引入方式也可以
  8. //import { EventBus } from '@/utils/eventBus.js';
  9. export default {
  10. methods: {
  11. sendMessage() {
  12. // 触发事件,传递一些数据
  13. EventBus.$emit('message-event', 'Hello from Component A!');
  14. }
  15. }
  16. }
  17. </script>

步骤 3: 监听事件

在另一个组件中,你可以使用$on方法通过事件总线来监听该事件。假设我们有一个组件ComponentB,它想要接收ComponentA发送的消息。

ComponentB.vue

  1. <template>
  2. <div>{{ message }}</div>
  3. </template>
  4. <script>
  5. // 引入事件总线
  6. import { EventBus } from './eventBus.js';
  7. export default {
  8. data() {
  9. return {
  10. message: ''
  11. }
  12. },
  13. created() {
  14. // 监听事件
  15. EventBus.$on('message-event', (msg) => {
  16. this.message = msg;
  17. });
  18. },
  19. beforeDestroy() {
  20. // 组件销毁前,移除事件监听器
  21. EventBus.$off('message-event');
  22. }
  23. }
  24. </script>

在ComponentB中,我们在created生命周期钩子中监听message-event事件,并在接收到消息时更新message数据属性。同时,在beforeDestroy钩子中,我们使用$off方法来移除事件监听器,这是一个好习惯,可以防止内存泄漏。

注意事项

虽然事件总线在Vue 2中是一个流行的跨组件通信方法,但在Vue 3中,推荐使用Vuex、Provide/Inject或Vue 3的Composition API(如mitt库)等更现代和更易于管理的状态管理或通信方法。此外,如果滥用事件总线,可能会导致事件监听器管理变得混乱,因此请慎重使用。

也可以注册在全局中去使用

安装全局事件总线

  1. var vm = new Vue({
  2. el: '#app',
  3. router,
  4. store,
  5. mixins: [{
  6. methods: {
  7. exportExcel(domId, fileName, ignoreFormatColumns) {
  8. handleExport(domId, fileName, ignoreFormatColumns)
  9. }
  10. }
  11. }],
  12. beforeCreate() {
  13. Vue.prototype.$eventBus = this // 安装全局事件总线
  14. },
  15. render: h => h(App)
  16. })

触发事件就可以这样使用了

  1. this.$eventBus.$emit('msgQueryLevelChange', _msgQueryLevel)

监听事件这样使用

  1. const my = this
  2. this.$eventBus.$on('msgQueryLevelChange', function(_msgQueryLevel) {
  3. console.log('组件事件被触发了.......重新执行刷新数据', _msgQueryLevel)
  4. my.jumpQuery(_msgQueryLevel)
  5. my.getMessage(1, my.isReadTag)
  6. })

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue2教程中路由项目分析

main.jswebpack.config.js 中的 entry 属性告诉我们项目以 main.js 作为入口。 main.js 首先引入 vue 和 routes,vue 不多...

Quartz.NET实例动态改变周期调度misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.NET Windows服务发布、安装、卸载、监听脚本服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

nginx常用命令nginx启动命令nginx重启命令nginx关闭命令nginx测试配置文件是否正确nginx nginx.pid文件丢失报错

启动命令:start nginx 关闭命令:nginx -s stop nginx -s quit nginx -s stop与nginx -s quit区别 Quit is a graceful shu...

DevExpress.XtraSpreadsheet.SpreadsheetControl控件 加载excel模板

stringpath=&quot;文件路径&quot;; DevExpress.XtraSpreadsheet.SpreadsheetControlspreadsheetControl=newDevExpress.Xtr...

上传文件到服务器及 下载到 客户端

usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Net; usingSystem.IO; namespaceCo...

使用OutLook发送邮件

publicstaticvoidOutlook(stringSubject,stringTextBody,stringFromAdd,stringFromPass,stringTo,stringCC,List&lt;string&...

类型“DbSet”在未引用的程序集中定义必须添加对程序集“EntityFramework Version=5.0.0.0 Culture=neutral PublicKeyToken=b7

在用mvc+ef的时候在DAL层引用上下文信息的时候会报出下面错误其实就是没得EntityFromwork,打开vs项目,点击工具,选择NuGe...

SQL Server 中使用游标

--声明一个游标 DECLAREMyCursorCURSOR FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo//定义一个叫MyCursor的游标,...

C委托与事件

1.什么是委托?  委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是...

正则表达式匹配中文标点符号

//匹配这些中文标点符号。?!,、;:“”‘&#39;()《》〈〉【】『』「」﹃﹄〔〕…—~﹏¥ varreg=/[\u3002|\uff1f|\...

泛型简单介绍

说到了泛型,就介绍下泛型泛型不是特指具体类型,是一种可变类型,可以把他看做一个类型占位符,根据传入的类型 延迟声明具...

数据读取器与指定的"xx"不兼容某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery&lt;SMachine&gt;(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

远程服务器返回错误: (403) 已禁止

今天调用接口的时候报的错。我们只要加上这两句代码就行了呢HttpWebRequestreq=(HttpWebRequest)HttpWebRequest.Create(url...

NPOI读取excelexcel 导入日期类型读取

NPOI是一个优秀的操作excel的库,可以很方便的进行excel的读取与导出NPOI读取excelpublicActionResultReadExcel() { //打...
这一生多幸运赶上过你.
排名
8
文章
231
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术