Vue中的全局事件總線:EventBus與$bus的比較詳解與實戰應用

  1. EventBus實例:

    • var EventBus = new Vue() 會創建一個名為EventBus的Vue實例,并將其存儲在變量EventBus中。
    • Vue.prototype.$bus = new Vue() 則直接在Vue的原型上創建一個新的Vue實例,并將其賦值給$bus屬性。
  2. 使用方式:

    • var EventBus = new Vue() 的方式需要你手動導入EventBus實例到需要使用的組件中。
    • Vue.prototype.$bus = new Vue() 的方式則無需手動導入,因為$bus已經成為Vue原型的一部分,你可以在任何組件中直接使用this.$bus來訪問該實例。
  3. 作用域和生命周期:

    • var EventBus = new Vue() 創建的EventBus實例的生命周期由你手動管理,需要在適當的時候進行銷毀。
    • Vue.prototype.$bus = new Vue() 創建的$bus實例則隨著Vue應用的生命周期一起管理,當Vue實例被銷毀時,$bus實例也會被銷毀。

因此,雖然這兩種方式都可以實現全局事件總線的功能,但在使用上有一些細微的差別。Vue.prototype.$bus = new Vue() 更加簡潔和方便,特別適合在Vue項目中實現全局事件總線的需求。


EventBus實例?

創建一個名為EventBus的Vue實例(/utils/event-bus.js)

import Vue from 'vue'

export const EventBus = new Vue()

在A組件中的使用

<button @click="sendMsg">按鈕</button>

?// 導入EventBus

import { EventBus } from '@/utils/event-bus.js'

sendMsg() {

// 發送名為'sendMsg'的事件,可以攜帶額外的數據

? ?EventBus.$emit('sendMsg', 'hello')

}

在B組件中的使用

?// 導入EventBus

import { EventBus } from '@/utils/event-bus.js'

created() {

// 監聽名為'sendMsg'的事件

EventBus.$on('sendMsg', (msg) => {

// 處理接收到的事件數據

??????this.msg = msg

})

},

beforeDestroy() {

// 在組件銷毀前取消事件監聽,以避免內存泄漏

????EventBus.$off('sendMsg')

}


$bus實例

var EventBus = new Vue();

這一行代碼創建了一個名為 EventBus 的新的 Vue 實例。這個實例將作為我們的事件總線,用于在 Vue 組件之間進行事件通信。
Object.defineProperties(Vue.prototype, { $bus: { get: function () { return EventBus } } })

這段代碼使用 Object.defineProperties 方法將 $bus 屬性添加到 Vue 的原型上。
定義了 $bus 屬性的 get 方法,當我們在組件中使用 this.$bus 訪問時,實際上是在獲取 EventBus 這個 Vue 實例。

通過在 main.js 中執行這段代碼,我們就可以在整個 Vue 應用中使用 this.$bus 來訪問事件總線實例,方便地實現組件之間的事件通信。


$bus實例(簡潔版)

在 main.js 中添加 $bus:

在 Vue 應用的入口文件 main.js 中添加以下代碼:

import Vue from 'vue';

// 創建一個全局的事件總線并掛載到 Vue 原型上
Vue.prototype.$bus = new Vue();

發送事件:

在任何組件中,可以使用 this.$bus.$emit 發送事件。例如:

export default {
? methods: {
? ? handleClick() {

// 發送名為 'custom-event' 的事件,可以攜帶額外的數據
? ? ? this.$bus.$emit('custom-event', eventData);
? ? }
? }
};

監聽事件:

在需要監聽事件的組件中,使用 this.$bus.$on 方法監聽事件。例如:

export default {
? created() {

// 監聽名為 'custom-event' 的事件
? ? this.$bus.$on('custom-event', this.handleCustomEvent);
? },
? methods: {
? ? handleCustomEvent(data) {

// 處理接收到的事件數據
? ? ? console.log('Received custom event:', data);
? ? }
? },
? beforeDestroy() {

// 在組件銷毀前取消事件監聽,以避免內存泄漏
? ? this.$bus.$off('custom-event', this.handleCustomEvent);
? }
};

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13448.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13448.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13448.shtml

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

相關文章

C# 結合 JavaScript 對 Web 控件進行數據輸入驗證

目錄 關于數據驗證 范例運行環境 驗證設計 JavaScript 方法 設計 實現 調用示例 C# 方法 設計 實現 調用示例 小結 關于數據驗證 在 Web 應用的錄入界面&#xff0c;數據驗證是一項重要的實現功能&#xff0c;數據驗證是指確認 Web 控件輸入或選擇的數據&#xff…

類對象作為類成員

在C中&#xff0c;類對象可以作為另一個類的成員變量。這種設計方式可以用于創建復雜的對象結構&#xff0c;使得一個類的對象能夠包含另一個類的對象。這種嵌套類的組合方式可以增強代碼的可重用性和模塊化。 類對象作為類成員的示例 讓我們通過一個示例來解釋這一概念。假設…

武漢信息系統建設和服務能力評估CS認證咨詢

很多企業在咨詢信息系統建設和服務能力評估的時候喜歡百度搜索&#xff0c;不管是本地咨詢機構還是外地咨詢機構只要價格便宜就找誰&#xff0c;這個在低等級的CS1是可以這么操作的&#xff0c;一旦上升到CS2級別及以上的&#xff0c;我們一般不推薦找外地咨詢機構&#xff0c;…

【文末附gpt升級方案】字節跳動發布豆包大模型:AI領域的革新與引領

隨著科技的飛速進步&#xff0c;人工智能&#xff08;AI&#xff09;已逐漸成為推動社會發展的重要力量。在這一背景下&#xff0c;字節跳動公司以其前瞻性的眼光和創新能力&#xff0c;于XXXX年XX月XX日正式發布了豆包大模型&#xff0c;這一舉動無疑在AI領域掀起了新一輪的浪…

C語言.動態內存管理

動態內存管理 1.為什么要有動態內存分配2.malloc和free2.1malloc2.2free 3.calloc和realloc3.1calloc3.2realloc 4.常見的動態內存管理的錯誤4.1對NULL指針解引用操作4.2對動態開辟空間的越界訪問4.3對非動態開辟內存使用free釋放4.4使用free釋放一塊動態開辟內存的一部分4.5對…

軍訓中的美差

大學時候的軍訓是在二年級秋季開學前進行的&#xff0c;地點是在河北的某部隊。 軍訓時候的分班是按照學號重新劃分的&#xff0c;我的學號在大學宿舍八個人中排最后&#xff0c;恰好就和其他宿舍的人分在了一個班。訓練正步走的時候&#xff0c;站在我左邊的那個哥們&#xf…

Signal 即將成為JavaScript的一部分

什么是響應性&#xff1f; 在過去的幾年中&#xff0c;響應性成為了所有現代前端框架以及React庫的核心。 對于不熟悉前端開發的人來說&#xff0c;起初這可能是一個令人困惑的概念&#xff0c;因為它改變了常規的、自上而下的、從調用者到被調用者的順序工作流。 在響應性范…

AR系列路由器配置VLAN間通信

AR路由器是華為公司推出的企業級路由器產品系列&#xff0c;具有高可靠性、高性能和易管理等特點。AR 系列路由器提供的功能包括路由轉發、安全接入、語音、視頻、無線等多種業務&#xff0c;支持各種接入方式和協議&#xff0c;并且可以方便地進行擴展和升級。 實驗拓撲圖&…

微信小程序介紹

一、微信小程序概述 微信小程序是一種不需要下載、安裝即可使用的應用&#xff0c;用戶只需掃一掃或搜一下即可打開。它實現了應用觸手可及的夢想&#xff0c;降低了應用的使用門檻。微信小程序自2017年1月上線以來&#xff0c;已經吸引了大量開發者加入&#xff0c;構建了一個…

【全開源】云界旅游微信小程序(源碼搭建/上線/運營/售后/維護更新)

開啟您的云端旅行新體驗 一、引言 在快節奏的現代生活中&#xff0c;旅行成為了人們放松身心、探索世界的重要方式。讓您的旅行更加便捷、高效&#xff0c;打造了云界旅游小程序&#xff0c;帶您領略云端旅行的無限魅力。 二、小程序功能概覽 云界旅游小程序集成了豐富的旅游…

【代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串】

代碼隨想錄算法訓練營第37期 第九天 | LeetCode28. 實現 strStr()、459.重復的子字符串 一、28. 實現 strStr() 解題代碼C&#xff1a; class Solution { public:void getNext(int* next, const string& s) {int j 0;next[0] 0;for(int i 1; i < s.size(); i) {whi…

【Maven】Nexus私服簡介_下載安裝_登錄

1、簡介 1.1介紹 Nexus私服&#xff0c;也被稱為Maven倉庫管理器&#xff0c;是許多公司在自己的局域網內搭建的遠程倉庫服務器。提供了強大的倉庫管理功能和構件搜索功能&#xff0c;使得開發人員能夠更方便地管理和使用Maven項目中的依賴庫。 1.2作用 內網訪問&#xff1…

Python代碼:七、小數化整數

1、題目 日常生活中我們會遇到很多小數&#xff0c;但是有的人不喜歡小數&#xff0c;因此會用四舍五入的方式將其去掉。在Python中我們更加簡單&#xff0c;可以利用強制類型轉換將小數轉變成整數&#xff0c;請你試一試。 2、代碼 import sysn float(input()) print(int(…

微服務(Spring Clould)--Nacos的安裝、配置

簡介&#xff1a;&#xff08;取自官網&#xff09; Nacos /nɑ:k??s/ 是 Dynamic Naming and Configuration Service的首字母簡稱&#xff0c;一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。 Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了…

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用

<sa8650>QCX Usecase 使用詳解—什么是可剪枝節點屬性以及何時使用 用例剪枝可實現光流設計分段(節點和目標緩沖區),這些分段實現了共享的邏輯接口,而這些接口的實現可能會發生沖突,但不會重復流水線。例如,overridesettings.txt 中的 enableAutoNoIPE=FALSE。 在 /qc…

《表格革命:數據可視化的力量與創新》

在當今數字化的時代&#xff0c;表格已不再是簡單的羅列工具&#xff0c;而是一場正在悄然興起的革命&#xff01; 表格&#xff0c;這個看似平凡無奇的存在&#xff0c;卻在各個領域發揮著至關重要的作用。無論是商業數據分析中精準呈現銷售趨勢和市場動態&#xff0c;還是學…

React 第三十七章 Scheduler 最小堆算法

在 Scheduler 中&#xff0c;使用最小堆的數據結構在對任務進行排序。 // 兩個任務隊列 var taskQueue: Array<Task> []; var timerQueue: Array<Task> [];push(timerQueue, newTask); // 像數組中推入一個任務 pop(timerQueue); // 從數組中彈出一個任務 time…

【深入理解MySQL的索引數據結構】

文章目錄 &#x1f4d5;索引底層數據結構與算法&#x1f4d9;索引數據結構&#x1f4d8;二叉樹&#x1f4d8;紅黑樹&#x1f4d8;Hash&#x1f4d8;B-Tree&#x1f4d8;BTree &#x1f4d9;表在不同存儲引擎的存儲結構&#x1f4d8;MyISAM存儲引擎索引實現&#x1f4da;文件結構…

C語言如何創建?個動態鏈表?

一、問題 創建動態鏈表就是指在程序執?過程中&#xff0c;從?到有&#xff0c;按照需求開辟結點和輸?各結點數據&#xff0c;并建?起前后相連接的關系。那么&#xff0c;如何創建動態鏈表呢&#xff1f; 二、解答 以建??個有任意名學?數據的單向動態鏈表為例&#xff0…

使用mysql主從熱備+keepalived服務+ipvsadm工具 實現 mysql高可用主備+負載均衡

目錄 1、工作原理 2、環境準備 3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm 4、修改keepalived服務的配置文件 4.1 修改主服務器上的keepalive服務的配置文件 4.2 修改備用服務器上的keepalive服務配置文件 5、編寫mysql監控腳本放到主服務器上 6、在主服…