084 全局事件总线1

news/2025/1/21 7:10:44/文章来源:https://www.cnblogs.com/lmzzr24/p/18513521

x应该具备两个能力:1.所有组件都能看到x;2.可以调用$on,$off,$emit

全局事件总线(Global Event Bus)是一种在 Vue 应用中实现组件间通信的技术。它可以用于任意组件之间的通信,包括父子组件、兄弟组件以及跨层级的组件。全局事件总线的核心思想是创建一个独立的事件中心,组件可以通过这个中心来发送和接收事件。

创建全局事件总线

  1. main.js 中创建全局事件总线
import Vue from 'vue';
import App from './App.vue';// 创建一个 Vue 实例作为事件总线
const bus = new Vue();// 将事件总线挂载到 Vue 的原型对象上
Vue.prototype.$bus = bus;new Vue({render: h => h(App),
}).$mount('#app');

使用全局事件总线

1. 发送事件

在发送事件的组件中,使用 $bus.$emit 方法来触发事件,并可以传递参数。

<template><div><button @click="sendEvent">发送事件</button></div>
</template><script>
export default {methods: {sendEvent() {this.$bus.$emit('my-event', 'Hello from Sender Component');}}
};
</script>

2. 接收事件

在接收事件的组件中,使用 $bus.$on 方法来监听事件,并定义事件处理函数。可以在 beforeDestroy 生命周期钩子中使用 $bus.$off 方法来解绑事件,以避免内存泄漏。

<template><div><p>接收到的消息: {{ message }}</p></div>
</template><script>
export default {data() {return {message: ''};},created() {this.$bus.$on('my-event', this.handleEvent);},beforeDestroy() {this.$bus.$off('my-event', this.handleEvent);},methods: {handleEvent(data) {this.message = data;}}
};
</script>

示例

假设我们有两个组件 SenderComponentReceiverComponent,我们需要从 SenderComponentReceiverComponent 发送消息。

SenderComponent.vue

<template><div><button @click="sendEvent">发送事件</button></div>
</template><script>
export default {methods: {sendEvent() {this.$bus.$emit('my-event', 'Hello from Sender Component');}}
};
</script>

ReceiverComponent.vue

<template><div><p>接收到的消息: {{ message }}</p></div>
</template><script>
export default {data() {return {message: ''};},created() {this.$bus.$on('my-event', this.handleEvent);},beforeDestroy() {this.$bus.$off('my-event', this.handleEvent);},methods: {handleEvent(data) {this.message = data;}}
};
</script>

总结

  1. 创建全局事件总线:在 main.js 中创建一个 Vue 实例并将其挂载到 Vue 的原型对象上。
  2. 发送事件:使用 $bus.$emit 方法触发事件。
  3. 接收事件:使用 $bus.$on 方法监听事件,并在 beforeDestroy 生命周期钩子中使用 $bus.$off 方法解绑事件。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现在做技术博客还有前途吗?

在数字化时代,技术博客作为一种分享知识、经验和见解的平台,曾经是技术爱好者和专业人士的首选。然而,随着自媒体的兴起和信息孤岛现象的出现,许多人开始质疑技术博客的前途。本文将探讨自媒体对技术博客的影响、自然流量的挑战、维护成本以及技术博客的未来前景。一、自媒…

ABAP Dump:CREATE_OBJECT_CLASS_NOT_FOUND

SAP生产机系统拷贝到测试机后,外部系统访问SAP的WEBSERVICE一直报错。 检查后发现表 VEPGENCLASS 中的服务对应的对象类型与生产机不一样,改成生产机一样,错误消失。

C#05-设计模式学习笔记

@目录1.设计模式的七大原则1.单一职责原则2.迪米特法则3.里氏代换原则4.依赖倒置原则5.接口隔离原则6.开闭原则7.合成复用原则8.总结2.创建型模式1.单例模式2.工厂方法模式1.简单工厂模式2.工厂模式3.抽象工厂模式4.生成器模式5.原型模式3.结构型设计模式1.适配器模式行为型设计…

[Azure] 使用 Cosmos DB for NoSQL 的 API

什么是 Azure Cosmos DB for NoSQL? Azure Cosmos DB for NoSQL 是用于处理文档数据模型的原生非关系服务。它可以使用灵活的架构任意存储原生 JSON 文档。数据会自动编制索引,并可使用专为 JSON 数据设计的 SQL 查询语言进行查询。使用适用于常用框架(如 .NET、Python、Jav…

springboot:调用接口返回的数据乱码解决

从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的application/json,而是application/x-jackson-smile,所以要通过改变数据类型解决…

贝叶斯网络应用在哪些方面

贝叶斯网络是一种强大的统计工具,用于表示随机变量之间的依赖关系。它的应用非常广泛,包括1、医疗诊断和疾病预测;2、风险管理和金融建模;3、机器学习和人工智能。其中,在医疗领域,贝叶斯网络可用于分析疾病的潜在原因,并预测病人的恢复概率。一、医疗诊断和疾病预测疾病…

明火识别检测视频分析服务器烟雾检测识别在企业消防安防场景中的应用

随着科技的不断进步,明火识别检测视频分析服务器在企业消防安防领域扮演着越来越重要的角色。它通过结合人工智能、大数据分析和物联网技术,为火灾预防、检测和响应提供了全新的解决方案。以下是在企业消防安防场景中的一些关键应用,它们展示了如何利用这些先进技术来提升消…

C#01-C#知识点

@目录0.什么是 C#?1.什么是类?2.面向对象编程的主要概念是什么?3.什么是对象?4.什么是构造函数,它有哪些不同的类型?5. C#中的析构函数是什么?6.C# 代码是托管代码还是非托管代码?7.什么是值类型和引用类型?8.什么是命名空间,它是强制性的吗?9.用例子解释 C# 中的注…

Mybatis(管理数据库)

Mybatis(管理数据库) 在配置好环境之后可以通过接口实现对于数据库的各种操作同时在Mapper.xml文件中写好sql语句,对于类存在多个成员需要添加resultMapper注释来提示Mybatis

为什么最近出现了这么多AI收录网站?

在这个信息泛滥的时代,许多人可能会感到困惑:每天都有大量的信息涌入,但如何在其中找到真正有用的内容呢?AI收录网站的出现恰好为我们解决了这个问题。这些网站通过人工智能技术,自动整理、分析和推荐信息,帮助用户高效获取所需内容。无论是学术研究、行业资讯还是日常生…

NFS server

NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁…

centos7部署libreoffice7.5

安装包下载地址:https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.0.1/rpm/x86_64/ 分别是LibreOffice_7.5.0.1_Linux_x86-64_rpm.tar.gz # libreoffice安装包LibreOffice_7.5.0.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz # 中文包LibreOf…