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.pswp.cn/web/64787.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64787.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64787.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于Spring Boot的電影網站系統

一、技術架構 后端框架&#xff1a;Spring Boot&#xff0c;它提供了自動配置、簡化依賴管理、內嵌式容器等特性&#xff0c;使得開發者可以快速搭建起一個功能完備的Web應用。 前端技術&#xff1a;可能采用Vue.js、JS、jQuery、Ajax等技術&#xff0c;結合Element UI等組件庫…

DeepSpeed訓練得到checkpoint如何像Huggingface模型一樣評測evaluation?zero_to_fp32.py有什么用?怎么用?

DeepSpeed訓練得到checkpoint如何像Huggingface模型一樣評測evaluation&#xff1f; 具體步驟 首先看一個樣例&#xff1a; 這是我用open-instruct框架&#xff0c;使用DeepSpeed訓練1728個steps得到的一個checkpoint。請注意&#xff0c;下文我演示用的例子是基于step_1152&…

node.js之---子線程(child_process)模塊

為什么需要子線程&#xff08;child_process&#xff09;模塊 Worker Threads 的基本概念 如何使用 Worker Threads Worker Threads 的性能 Worker 線程的優勢和限制 進階用法&#xff1a;共享內存 為什么需要子線程&#xff08;child_process&#xff09;模塊 在 Node.js…

【深度學習基礎之多尺度特征提取】多尺度圖像增強(Multi-Scale Image Augmentation)是如何在深度學習網絡中提取多尺度特征的?附代碼

【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff09;是如何在深度學習網絡中提取多尺度特征的&#xff1f;附代碼 【深度學習基礎之多尺度特征提取】多尺度圖像增強&#xff08;Multi-Scale Image Augmentation&#xff0…

鴻蒙應用開發 - 如何去掉字符串中空格

鴻蒙應用開發 - 如何去掉字符串中空格 在鴻蒙應用開發中&#xff0c;如果你使用的是ArkTS&#xff08;Ark TypeScript&#xff09;&#xff0c;可以通過JavaScript或TypeScript內置的字符串方法來去除字符串中的空格。以下是一些常用的方法&#xff1a; trim()&#xff1a;去…

最新版Chrome瀏覽器加載ActiveX控件之CFCA安全輸入控件

背景 CFCA安全輸入控件用于保證用戶在瀏覽器、桌面客戶端、移動客戶端中輸入信息的安全性&#xff0c;防止運行在用戶系統上的病毒、木馬等惡意程序入侵竊取用戶輸入的敏感信息。確保用戶輸入、本地緩存、網絡傳輸整個流程中&#xff0c;輸入的敏感信息不被竊取。廣泛應用于銀行…

vSAN手動平衡磁盤

原創作者&#xff1a;運維工程師 謝晉 vSAN手動平衡磁盤 vSAN手動平衡磁盤 vSAN手動平衡磁盤 1、ssh登錄到VCSA&#xff0c;然后登錄到 Ruby vSphere 控制臺 (RVC) # rvc administratorvsphere.local10.10.0.202、切換到計算機命名空間 0 / 1 10.10.0.20/ > cd 1 /10.…

接口測試面試題

接口測試在軟件測試中占據重要位置&#xff0c;無論是功能測試還是性能測試&#xff0c;接口的穩定性至關重要。以下總結了一些常見的接口測試面試題&#xff0c;幫助你從容應對面試挑戰&#xff01; 面試官常說&#xff1a;“接口測試是測試的重頭戲&#xff0c;了解接口的設計…

【前端,TypeScript】TypeScript速成(六):函數

函數 函數的定義 定義一個最簡單的加法函數&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的語法與 Golang 也非常的相似&#xff09; 調用該函數&#xff1a; console.log(add(2, 3)) // out [LOG…

css的選擇器有哪些?優先級?

元素選擇器&#xff1a;選擇所有指定標簽類型的元素。 類選擇器&#xff1a;選擇具有指定類的所有元素&#xff0c;類名前有一個點 ID 選擇器&#xff1a;選擇具有指定 id 屬性的元素&#xff0c;ID 前有一個井號屬性選擇器&#xff1a;選擇具有指定屬性或屬性值的元素后代選…

Vue-Router之嵌套路由

在路由配置中&#xff0c;配置children import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({mode: history,base: import.meta.env.BASE_URL,routes: [{path: /,redirect: /home},{path: /home,name: home,component: () &…

Easy-Trans反向翻譯+Excel導入最佳實踐

1、概述 實現用戶excel上傳、解析、對于用戶輸入的中文翻譯為字典碼或者id&#xff0c;實現用戶輸入的參數校驗&#xff0c;最后入庫。如果用戶輸入的參數有問題&#xff0c;返回校驗結果給前端。 excel解析使用My-Excel組件&#xff0c;校驗使用hibernate-validator&#xff…

高效管理 Nginx 的利器:nginxWebUI 指南和 Docker 部署安裝過程

前言 Nginx WebUI 是一個為 Nginx 提供圖形化管理界面的工具。通過 WebUI&#xff0c;用戶可以輕松管理 Nginx 配置&#xff0c;而無需直接編輯配置文件&#xff0c;尤其適合新手用戶和頻繁修改配置的場景。 官網文檔&#xff1a;nginxWebUI - 文檔 本文將分享為什么選擇 ngin…

SpringCloud源碼-openFeign

LoadBalancer默認只有nacos服務發現器 openFeign與springcloud loadbalancer的結合點 openFeign通過spring cloud loadbalancer進行負載均衡&#xff0c;spring cloud loadbalancer通過discovery client獲取nacos的機器列表&#xff0c;然后底層進行負載均衡。

基于微信小程序的校園自助打印系統

博主介紹&#xff1a;java高級開發&#xff0c;從事互聯網行業六年&#xff0c;熟悉各種主流語言&#xff0c;精通java、python、php、爬蟲、web開發&#xff0c;已經做了多年的設計程序開發&#xff0c;開發過上千套設計程序&#xff0c;沒有什么華麗的語言&#xff0c;只有實…

從 ELK Stack 到簡單 — Elastic Cloud Serverless 上的 Elastic 可觀察性

作者&#xff1a;來自 Elastic Bahubali Shetti, Chris DiStasio 宣布 Elastic Cloud Serverless 上的 Elastic Observability 正式發布 — 一款完全托管的可觀察性解決方案。 隨著組織規模的擴大&#xff0c;一個能夠處理分布式云環境的復雜性并提供實時洞察的可觀察性解決方…

21.<基于Spring圖書管理系統②(圖書列表+刪除圖書+更改圖書)(非強制登錄版本完結)>

PS&#xff1a; 開閉原則 定義和背景 開閉原則&#xff08;Open-Closed Principle, OCP&#xff09;&#xff0c;也稱為開放封閉原則&#xff0c;是面向對象設計中的一個基本原則。該原則強調軟件中的模塊、類或函數應該對擴展開放&#xff0c;對修改封閉。這意味著一個軟件實體…

三、GIT與Github推送(上傳)和克隆(下載)

GIT與Github推送&#xff08;上傳&#xff09;和克隆&#xff08;下載&#xff09; 一、配置好SSH二、在Github創建倉庫三、git克隆&#xff08;下載&#xff09;文件四、git推送&#xff08;上傳&#xff09;文件到遠程倉庫 一、配置好SSH Git與Github上傳和下載時需要使用到…

網工日記:FTP兩種工作模式的區別

FTP 的主動模式和被動模式在連接建立的發起方、數據傳輸端口以及對網絡環境的適應性等方面存在明顯區別&#xff1a; 1. 連接發起方 主動模式&#xff1a;數據連接由服務器主動發起。在控制連接建立后&#xff0c;客戶端通過 PORT 命令告知服務器自己用于接收數據的臨時端口號…

【數字化】華為一體四面細化架構藍圖

導讀&#xff1a;華為的“一體四面”企業架構設計方法是一種綜合性的管理框架&#xff0c;它通過業務架構、信息架構、應用架構和技術架構的集成設計&#xff0c;構建出一個既符合業務需求&#xff0c;又具備高度靈活性和可擴展性的IT系統。這種架構設計方法強調從業務視角出發…