2023-07-28 14:28:28來源:宇宙一碼平川
在Vue.js中有一種使用event emitters
通過父組件在兩個子組件之間進行通信的方法。在子組件中設置事件并在父組件中設置偵聽器時,響應式將通過父組件向下傳遞到嵌套組件。
雖然這是一個有價值的解決方案,但隨著項目的發(fā)展,它可能會變得笨拙。事件總線是一個 Vue.js 實例,它可以在一個組件中發(fā)出事件,然后直接偵聽并響應另一個組件中發(fā)出的事件——無需父組件的幫助。事件總線比發(fā)射器更高效,因為它需要更少的代碼來運行。
在本教程中,我們將在 Vue.js 項目中創(chuàng)建一個事件總線,以促進兩個組件之間通過私有通道進行通信。這通常稱為發(fā)布-訂閱方法。
(資料圖片)
這篇文章適合所有階段的開發(fā)人員,包括初學者。在閱讀本文之前,您應該已經(jīng)具備以下幾點:
已安裝版本 14.18+ 及更高版本的Node.js。您可以通過在終端/命令提示符下運行以下命令來驗證您是否具有此版本:node -v
安裝了 npm 版本 6.x 及更高版本。在終端中使用以下命令驗證安裝的版本:npm -v
Visual Studio Code Editor 或類似的代碼編輯器運行以下命令來搭建 Vite 和 Vue 項目的基架:# npm 6.xnpm create vite@latest event-bus-tutorial --template vue# npm 7+, extra double-dash is needed:npm create vite@latest event-bus-tutorial -- --template vue
導航到 event-bus-tutorial 目錄并使用 npm 安裝所需的依賴項:cd event-bus-tutorialnpm install
在 Vue 2 中使用事件總線模式在 Vue 2.x 中,Vue 實例可用于觸發(fā)通過事件發(fā)射器 API($on
、$off
和$once
) 強制附加的處理程序。
為了使用事件總線模式,你所要做的就是創(chuàng)建一個 Vue 構(gòu)造函數(shù)的新實例,將該實例分配給一個名為eventBus
的常量變量,然后將其導出。這個實例充當事件總線,允許 Vue 應用程序中的不同組件相互通信:
// eventBus.jsconst eventBus = new Vue()export default eventBus
導入 eventBus 實例并在要接收事件的組件中,添加事件偵聽器:
// ChildComponent.vueimport eventBus from "./eventBus"export default { mounted() { // adding eventBus listener eventBus.$on("custom-event", () => { console.log("Custom event triggered!") }) }, beforeDestroy() { // removing eventBus listener eventBus.$off("custom-event") }}
導入eventBus
實例并在要發(fā)送事件的組件中,添加事件發(fā)射器:
// ParentComponent.vueimport eventBus from "./eventBus"export default { methods: { sendCustomEvent() { // sending the event eventBus.$emit("custom-event") } }}
Vue 3 中的事件總線入門在 Vue 3 中,$on
、$off
和$once
方法已從 Vue 實例中完全刪除。因此,為了使用事件總線模式,必須安裝外部事件發(fā)射器和偵聽器包,例如mitt
。
使用以下命令安裝mitt
包并開始提供應用程序:
npm install --save mittnpm run dev
main.js 打開位于目錄 src 中的文件,并修改其中的代碼,如下所示:
import { createApp } from "vue"import mitt from "mitt"import App from "./App.vue"const emitter = mitt()const app = createApp(App)app.config.globalProperties.emitter = emitterapp.mount("#app")
這段代碼通過創(chuàng)建一個發(fā)射器實例,使其通過 Vue 應用程序?qū)嵗衷L問,并將應用程序掛載到 DOM 中,將 mitt 事件發(fā)射器庫與 Vue 3 應用程序集成。這允許組件使用發(fā)射器發(fā)出和偵聽事件,而無需直接導入。
創(chuàng)建我們的子組件在我們的演示中,我們將創(chuàng)建兩個子組件,它們需要在不使用父組件作為中介的情況下相互通信。首先,在components
目錄中創(chuàng)建一個名為Child1.vue
的新文件,并將以下代碼塊粘貼到其中:
<script >export default { name: "Child1", data: () => ({ counter: 0, }), methods: {},};</script>
總體而言,此代碼呈現(xiàn)一個 在 這個 Vue 組件渲染一個 現(xiàn)在,轉(zhuǎn)到您的 在 現(xiàn)在,兩個組件已準備就緒,您可以在組件中偵聽 在這里, 該方法 設置事件后,我們需要讓第二個組件偵聽并響應事件。打開文件 該代碼使用 該 單擊組件上的“Increment”按鈕時, 在大多數(shù)情況下,不建議使用全局事件總線來促進組件之間的通信。雖然它最初似乎是最簡單的解決方案,但隨著時間的推移,它經(jīng)常導致重大的維護挑戰(zhàn)。 根據(jù)具體情況,Vue 開發(fā)團隊推薦了幾種替代方法,而不是依賴事件總線: 這是對 Vue.js 中事件總線的介紹。事件總線充當組件之間易于實現(xiàn)的獨立通信,無需通過中央組件或父組件。 雖然事件總線最初似乎是組件間通信的便捷方法,但建議探索替代選項,例如provide/inject或全局狀態(tài)管理。這些替代方案為促進組件之間的通信提供了更強大且可維護的解決方案。
關(guān)鍵詞:
。該組件還具有內(nèi)部數(shù)據(jù)屬性
counter
設置為0和空methods
屬性。components
目錄中創(chuàng)建一個名為Child2.vue
的新文件,并在其中粘貼以下代碼塊:
{{ counter }}
的組件。該
counter
值動態(tài)顯示在標題中。App.vue
文件并將其整個代碼替換為以下內(nèi)容:
App.vue
組件內(nèi)部,代碼導入并呈現(xiàn)樣式化的父 div 中的Child1
和Child2
組件。Child2
事件時,通過在Child1
組件中發(fā)出來設置事件。打開文件Child1.vue
并將以下代碼塊復制到其中:
onclick
事件偵聽器被添加到button
元素中。觸發(fā)此事件時,將調(diào)用名為sendEvent()
的方法。sendEvent()
將計數(shù)器值遞增 1,并使用全局事件發(fā)射器向任何父組件或同級組件發(fā)出具有更新counter
值的事件increment
。Child2.vue
并復制到以下代碼塊中:
{{ counter }}
mounted
生命周期掛鉤在應用程序掛載到 DOM 上時初始化偵聽過程。emitter.on
語句現(xiàn)在正在偵聽increment
事件,向下傳遞data
參數(shù),并將其設置為新計數(shù)器:increment
事件將與更新counter
的值一起發(fā)送到Child2
和Child1
組件。
在Vue js中有一種使用eventemitters通過父組件在兩個子組件之間進行通
縱觀過去一百多年全球城市的興衰浮沉,作者認為影響一個城市發(fā)展的因素
云平臺可在快速發(fā)展的物聯(lián)網(wǎng)(IoT)領(lǐng)域?qū)崿F(xiàn)無縫連接、數(shù)據(jù)管理和分析。
制造業(yè)和元宇宙將元宇宙技術(shù)集成到制造業(yè)中有可能徹底改變公司的運營方
記者于泊升7月27日,山東省會經(jīng)濟圈濟南、淄博、東營、泰安、德州、聊
7月26日晚,由省紀委、省委宣傳部聯(lián)合組織的廉政題材話劇《于成龍》在
領(lǐng)湃科技7月28日公告,公司董事會于近日收到公司董事長葉善錦提交的書
6月17至21日,《詩刊》社首期青春詩人研修班在福建霞浦成功舉辦。李嘯
JupyterNotebook是一款功能強大的基于Web的交互式開發(fā)工具,可讓你創(chuàng)建
AICube開放GPT-4給大家使用以及AI工具助手,可以簡化大家生圖的的promp
作者|張哲EasyModeling是我在2021年圣誕假期期間開發(fā)的一個Java注解處
作為程序員,大家肯定都聽說過程序員的35歲危機,有的人剛?cè)肼毘绦騿T這
日本財務大臣鈴木俊一:密切關(guān)注經(jīng)濟政策中的物價上漲情況
1、1朵紅玫瑰的花語——情有獨鐘,你是唯一2、2朵紅玫瑰的花語——二人
一、概覽首先和大家分享下業(yè)務場景和技術(shù)架構(gòu)。文中的Demo數(shù)據(jù)都是脫敏