Vue面试 - vue中的事件总线

news/2025/2/12 16:36:51/文章来源:https://www.cnblogs.com/xiaodi-js/p/18711766

Vue 事件总线(Event Bus)是一种用于非父子组件间通信的模式,它通过一个共享的 Vue 实例作为中央事件总线,允许组件之间触发和监听自定义事件。


核心概念

  • 作用:解决跨层级组件(兄弟组件、远房组件)之间的通信问题。
  • 原理:创建一个全局的 Vue 实例作为事件中心,组件通过 $emit 触发事件,其他组件通过 $on 监听事件。

使用步骤

1. 创建事件总线

在 Vue 2 中,通常将其挂载到 Vue 原型上以便全局访问:

// eventBus.js
import Vue from 'vue';
export const EventBus = new Vue();// 或在 main.js 中全局挂载
Vue.prototype.$eventBus = new Vue();

2. 触发事件(发送数据)

在需要发送事件的组件中,使用 $emit

<script>
export default {methods: {sendMessage() {// 触发事件,传递数据this.$eventBus.$emit('custom-event', { data: 'Hello from Component A!' });}}
}
</script>

3. 监听事件(接收数据)

在需要接收事件的组件中,使用 $on 监听:

<script>
export default {created() {// 监听事件,接收数据this.$eventBus.$on('custom-event', (payload) => {console.log('Received:', payload.data); // 输出:Hello from Component A!});},beforeDestroy() {// 组件销毁前移除监听,避免内存泄漏this.$eventBus.$off('custom-event');}
}
</script>

注意事项

  1. 移除监听:务必在组件销毁前(beforeDestroy 或 Vue 3 的 beforeUnmount)使用 $off 移除事件监听,否则可能导致内存泄漏。
  2. 命名冲突:事件名建议使用唯一标识(如命名空间),避免不同组件间的冲突。
  3. 替代方案:在 Vue 3 中,官方移除了 $on$off 等方法,推荐使用第三方库(如 mitt)或 provide/inject + reactive 实现类似功能。

Vue 3 中的替代方案

Vue 3 不再支持事件总线,但可以通过以下方式实现类似功能:

使用 mitt

// eventBus.js
import mitt from 'mitt';
export const emitter = mitt();// 组件A触发事件
emitter.emit('event-name', data);// 组件B监听事件
emitter.on('event-name', (data) => { /* ... */ });// 组件销毁时移除监听
emitter.off('event-name');

优缺点

  • 优点:简单快捷,适合小型项目或简单场景。
  • 缺点:大型项目中容易导致事件流混乱,难以调试,建议复杂场景使用 Vuex/Pinia。

通过事件总线,你可以轻松实现跨组件通信,但需注意合理使用以避免维护问题。

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

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

相关文章

Kafka基础知识-消费者

一、消费方式 consumer采用pull(拉)的模式从broker中读取数据。 push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快的速度传递消息,但是这样容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而…

记 Quartz 定时任务导致内存泄露(OOM)问题

公司的系统一直运行正常,但是某一天同时反馈采集系统出现了没有办法正常运行的问题。经过查看日志定位到后台报错 OOM[2025-02-04 18:10:44.497] [] [[34m INFO[0;39m] LocalDataSourceJobStore:968] Handling the first 1 triggers that missed their scheduled fire-time. M…

nginx 简单实践:正向代理、反向代理【nginx 实践系列之二】

本文为 nginx 简单实践系列文章之一,主要简单实践了两个内容:正向代理、反向代理的简单实现,仅供参考。〇、前言 本文为 nginx 简单实践系列文章之二,主要简单实践了两个内容:正向代理、反向代理,仅供参考。 关于 Nginx 基础,以及安装和配置详解,可以参考博主过往文章:…

KubeSphere 和 K8s 高可用集群离线部署全攻略

本文首发:运维有术,作者术哥。 今天,我们将一起探索如何在离线环境中部署 K8s v1.30.6 和 KubeSphere v4.1.2 高可用集群。对于离线环境的镜像仓库管理,官方推荐使用 Harbor 作为镜像仓库管理工具,它为企业级用户提供了高效、安全的镜像存储方案。而在本指南中,我们将以 …

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-13- iframe操作-中篇(详细教程)

1.简介 按照计划今天就要用实际的例子进行iframe自动化测试。宏哥还是用之前找到的一个含有iframe的网页(QQ邮箱和163邮箱),别的邮箱宏哥就没有细看了,可能后期这两个邮箱页面优化升级,也就不能用了,但是现在还可以用。所以今天这一篇的主要内容就是用这两个网页的iframe…

炸裂:SpringAI内置DeepSeek啦!

好消息,Spring AI 最新快照版已经内置 DeepSeek 了,所以以后项目中对接 DeepSeek 就方便多了。但因为快照版会有很多 Bug,所以今天咱们就来看稳定版的 Spring AI 如何对接 DeepSeek 满血版。 SpringAI和DeepSeek介绍 Spring AI 是 Spring 生态系统中的一个重要项目,旨在将人…

openssl生成证书请求时报错:invalid extension string:v3_conf.c:140:name=subjectAltName,section=@alt_names

解决方法: 1. 使用自定义的openssl-ca.cnf openssl req -new -key client.key -out client.csr -subj "/C=cn/ST=nanjing/L=nanjing/O=zte/OU=zte/CN=localhost" -config ./openssl-ca.cnf2. 修改系统的/etc/pki/tls/openssl.cnf 注释掉[ v3_req ]段部分 # [ v3_req…

linux中文件操作相关命令和使用

linux中文件操作相关命令和使用 cat more/less head/tail vi/vim等相关命令 cat 1. 文件查看 cat 文件名 --全部内容显示 -- 好东西 可以用于配置文件查看过滤 cat 文件名 | grep 筛选内容 --内容筛选显示 2. 文件创建并输入初始化文本 -- 新建content.txt 文…

APIPark 新增 AI 大模型负载均衡,APIKey 资源池以及 AI Token 消耗统计等重磅功能!

开发者们好!APIPark V1.4 功能更新给大家带来「负载均衡」、「APIKey 资源池」以及「Token 消耗统计」等重要功能,看看是否能帮助到大家更好地使用 AI 大模型~ V1.4 版本说明新功能 [❤️新增] 新增支持 AI 模型负载均衡:同时接入多款大模型,当原定的 AI 服务商无法访问时,…

活动营销系统

一、整体架构图二、核心业务系统介绍 2.1.接入层统一异常处理逻辑2.2.邀请服务逻辑2.3.权益发放服务2.4.排行榜服务 2.4.1.榜单服务数据结构 数据结构分为两块:配置中心数据,因为排行榜没有后台配置平台,只能将配置数据放到配置中心,具备实时更改配置的能力 数据表,主要是排行榜…

004 条件渲染

1、v-ifv-if指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true值的时候被渲染。<p v-if="flag">我是孙猴子</p>data(){return{flag:true}} 2、v-else你可以使用 v-else 指令来表示 v-if 的"else块"<p v-if="flag&quo…

Tinyfox 简易教程之:Hello World!

Tinyfox程序设计系列教程之入门篇一,什么是 Tinyfox: Tinyfox 是一款自带 HTTP 服务器的以 WebApi、WebSocket 及“动态HTML”为核心功能的超轻量级的独立性极强的高性能 Web 应用程序基础框架。 Tinyfox 简单易用,性能强劲,跨平台,既支持 Linux 也支持 Windows,既支持 x…