Vue 全局事件总线:Vue 2 vs Vue 3 实现

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

  • 🤖 洛可可白:个人主页

  • 🔥 个人专栏:✅前端技术 ✅后端技术

  • 🏠 个人博客:洛可可白博客

  • 🐱 代码获取:bestwishes0203

  • 📷 封面壁纸:洛可可白wallpaper

在这里插入图片描述

这里写自定义目录标题

  • Vue 全局事件总线:Vue 2 vs Vue 3 实现
    • 引言
    • Vue 2 全局事件总线
      • 实现步骤
    • Vue 3 全局事件总线
      • 实现步骤
    • 比较与结论
      • Vue 2 事件总线
      • Vue 3 事件总线

Vue 全局事件总线:Vue 2 vs Vue 3 实现

引言

在构建大型Vue应用时,跨组件通信是一个常见需求。Vue提供了多种通信方式,包括父子组件传参、兄弟组件通信、Vuex状态管理等。然而,对于简单的跨组件通信,全局事件总线(Event Bus)提供了一种轻量级的解决方案。本文将比较在Vue 2和Vue 3中实现全局事件总线的方法,并探讨各自的优缺点。

Vue 2 全局事件总线

在Vue 2中,全局事件总线通常通过创建一个新的Vue实例来实现,这个实例作为中央枢纽供所有组件使用。

实现步骤

  1. 创建事件总线
// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();
  1. 在组件中使用事件总线
<template><button @click="emitEvent">发射事件</button>
</template><script>
import { EventBus } from './event-bus.js';export default {methods: {emitEvent() {EventBus.$emit('my-event', '这是来自组件A的消息');}}
}
</script>
<template><div><h2>事件消息:{{ message }}</h2></div>
</template><script>
import { EventBus } from './event-bus.js';export default {data() {return {message: ''};},created() {EventBus.$on('my-event', this.handleEvent);},methods: {handleEvent(msg) {this.message = msg;}},beforeDestroy() {EventBus.$off('my-event', this.handleEvent);}
}
</script>

Vue 3 全局事件总线

Vue 3引入了组合式API,提供了更多灵活性。我们可以利用这些新特性来实现全局事件总线。

实现步骤

  1. 创建事件总线
// event-bus.js
import { reactive, readonly } from 'vue';const state = reactive(new Map());function emit(event, payload) {(state.get(event) || []).forEach((callback) => callback(payload));
}function on(event, callback) {if (!state.has(event)) {state.set(event, []);}state.get(event).push(callback);return () => off(event, callback);
}function off(event, callback) {const callbacks = state.get(event);if (callbacks) {callbacks.splice(callbacks.indexOf(callback), 1);}
}export const EventBus = {emit,on,off,readonly: readonly(state),
};
  1. 在组件中使用事件总线
<template><button @click="emitEvent">发射事件</button>
</template><script setup>
import { EventBus } from './event-bus.js';const emitEvent = () => {EventBus.emit('my-event', '这是来自组件A的消息');
};
</script>
<template><div><h2>事件消息:{{ message }}</h2></div>
</template><script setup>
import { ref, onUnmounted } from 'vue';
import { EventBus } from './event-bus.js';const message = ref('');const listener = (msg) => {message.value = msg;
};EventBus.on('my-event', listener);onUnmounted(() => {EventBus.off('my-event', listener);
});
</script>

比较与结论

Vue 2 事件总线

  • 优点:简单易用,不需要额外的库或工具。
  • 缺点:随着应用规模的增长,事件总线可能会变得难以维护,且不易于跟踪事件的来源和去向。

Vue 3 事件总线

  • 优点:利用组合式API,代码更加模块化,易于维护。响应式的状态管理使得事件监听和发射更加灵活。
  • 缺点:需要对组合式API有一定的了解,对于初学者来说可能有一定的学习曲线。

如果对你有帮助,点赞👍、收藏💖、关注🔔是我更新的动力!👋🌟🚀

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

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

相关文章

xml格式化(1):使用python的xml库实现自闭合标签

前言 最近一段时间一直想要写一个urdf格式化插件。 至于为什么嘛&#xff0c;因为使用sw2urdf插件&#xff0c;导出的urdf&#xff0c;同一标签的内容&#xff0c;是跨行的&#xff0c;这就导致&#xff0c;内容比较乱&#xff0c;而且行数比较多。影响阅读。 因此&#xff…

模型 九屏幕分析法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。九屏幕法&#xff1a;全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机&#xff0c;为了全面评估市场潜力和风险&#xff0c;他们…

基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103

基于开发/发布/缺陷分离模型的 Git 分支管理实践 引言 在现代软件开发中&#xff0c;合理的分支管理策略是保证项目成功的关键因素之一。本文将详细介绍一种基于开发/发布/缺陷分离的 Git 分支管理模型&#xff0c;这种模型不仅能提升团队协作效率&#xff0c;还能确保代码质…

前端工程化之手搓webpack5 --【elpis全栈项目】

前端工程化之手搓webpack5 --【elpis全栈项目】 导读 基本流程&#xff1a;输入 – 编译 – 输出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

2023最新版IDEA创建一个SpringBoot项目 (详细教程)

在IDEA中创建一个SpringBoot项目 springboot是我们java开发中最流行的框架之一&#xff0c;下面我们看看如何在idea中创建一个springboot项目。 文章目录 在IDEA中创建一个SpringBoot项目一、springboot简单介绍二、快速开始1.新建项目2.配置Maven3.测试 总结 一、springboot简…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题

Compose 中的主题内的代码大量定义了 CompositionLocal&#xff0c;因此在学习主题之前&#xff0c;先学习 CompositionLocal 铺垫好基础。 1、CompositionLocal 1.1 显式传参与隐式传参 显式传参需要依赖函数的调用&#xff0c;层层传递&#xff1b;隐式传参通过创建全局变量…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…

【数据结构05】排序

系列文章目录 【数据结构05】排序 . 【算法思想04】二分查找 文章目录 系列文章目录[toc] 1. 基本思想与实现1.1 插入类排序1.1.1 直接插入排序&#xff08;*&#xff09;1.1.2 折半插入排序1.1.3 希尔排序&#xff08;*&#xff09; 1.2 交换类排序1.2.1 冒泡排序&#xff08…

数据挖掘——概论

数据挖掘——概论 数据、信息和知识的关联和联系数据挖掘数据挖掘定义数据挖掘的步骤数据挖掘的主要内容 数据、信息和知识的关联和联系 数据、信息和知识是知识工作者感知和认识客观事物的3个连贯的阶段。 数据无处不在&#xff0c;聚合/集成后转化为信息&#xff0c;结构化后…

Hello 2025

Hello 2025 A. MEX Table 题意&#xff1a; 给出 0 到 n ∗ m − 1 的数字&#xff0c;排列成 n m 的表格&#xff0c;最大化 ∑ i 1 n mex ⁡ ( { a i , 1 , a i , 2 , … , a i , m } ) ∑ j 1 m mex ⁡ ( { a 1 , j , a 2 , j , … , a n , j } ) 给出0到n*m-1的数字&…

[答疑]用例规约:系统请求3dsMax创建体块

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2024-12-22 12:39 潘老师&#xff0c;请教一个问题&#xff1a;在需求工作流书写系统用例规约时&#xff0c;这个“计算”&#xff08;改变&#xff09;可不可以写多个内容&…

第431场周赛:最长乘积等价子数组、计算字符串的镜像分数、收集连续 K 个袋子可以获得的最多硬币数量、不重叠区间的最大得分

Q1、最长乘积等价子数组 1、题目描述 给你一个由 正整数 组成的数组 nums。 如果一个数组 arr 满足 prod(arr) lcm(arr) * gcd(arr)&#xff0c;则称其为 乘积等价数组 &#xff0c;其中&#xff1a; prod(arr) 表示 arr 中所有元素的乘积。gcd(arr) 表示 arr 中所有元素的…

小程序租赁系统开发的优势与应用前景分析

内容概要 小程序租赁系统是一种新兴的数字化解决方案&#xff0c;旨在为用户提供更加便捷与高效的租赁服务。它通常包括一系列功能&#xff0c;如在线浏览、即时预定、支付功能以及用户反馈机制。这些系统在使用上极为友好&#xff0c;让用户能够轻松选择所需的商品或服务&…

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化&#xff1a;一步直达聊天界面二、全新“项目”功能&#xff1a;让工作更有条理三、语音功能升级&#xff1a;全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 亲爱的用户&…

音视频入门基础:MPEG2-PS专题(3)——MPEG2-PS格式简介

一、引言 本文对MPEG2-PS格式进行简介。 进行简介之前&#xff0c;请各位先下载MPEG2-PS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-PS的官方文档。但是ITU提供的文档是免费的&#xff0c;ISO/IEC是付费的&#xff0c;所以我们主要阅读ITU提供的官方文档&#xff0c;比如较新…

概述(讲讲python基本语法和第三方库)

我是北子&#xff0c;这是我自己写的python教程&#xff0c;主要是记录自己的学习成果方便自己日后复习&#xff0c; 我先学了C/C&#xff0c;所以这套教程中可能会将很多概念和C/C去对比&#xff0c;所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…

Java jni调用nnom rnn-denoise 降噪

介绍&#xff1a;https://github.com/majianjia/nnom/blob/master/examples/rnn-denoise/README_CN.md 默认提供了一个wav的例子 #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h>#include …