新聞中心
在Vue.js中有一種使用event emitters通過(guò)父組件在兩個(gè)子組件之間進(jìn)行通信的方法。在子組件中設(shè)置事件并在父組件中設(shè)置偵聽(tīng)器時(shí),響應(yīng)式將通過(guò)父組件向下傳遞到嵌套組件。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、怒江州網(wǎng)絡(luò)推廣、重慶小程序開(kāi)發(fā)、怒江州網(wǎng)絡(luò)營(yíng)銷、怒江州企業(yè)策劃、怒江州品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供怒江州建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
雖然這是一個(gè)有價(jià)值的解決方案,但隨著項(xiàng)目的發(fā)展,它可能會(huì)變得笨拙。事件總線是一個(gè) Vue.js 實(shí)例,它可以在一個(gè)組件中發(fā)出事件,然后直接偵聽(tīng)并響應(yīng)另一個(gè)組件中發(fā)出的事件——無(wú)需父組件的幫助。事件總線比發(fā)射器更高效,因?yàn)樗枰俚拇a來(lái)運(yùn)行。
在本教程中,我們將在 Vue.js 項(xiàng)目中創(chuàng)建一個(gè)事件總線,以促進(jìn)兩個(gè)組件之間通過(guò)私有通道進(jìn)行通信。這通常稱為發(fā)布-訂閱方法。
先決條件
這篇文章適合所有階段的開(kāi)發(fā)人員,包括初學(xué)者。在閱讀本文之前,您應(yīng)該已經(jīng)具備以下幾點(diǎn):
- 已安裝版本 14.18+ 及更高版本的Node.js。您可以通過(guò)在終端/命令提示符下運(yùn)行以下命令來(lái)驗(yàn)證您是否具有此版本:
node -v - 安裝了 npm 版本 6.x 及更高版本。在終端中使用以下命令驗(yàn)證安裝的版本:
npm -v - Visual Studio Code Editor 或類似的代碼編輯器
- 運(yùn)行以下命令來(lái)搭建 Vite 和 Vue 項(xiàng)目的基架:
# npm 6.x
npm create vite@latest event-bus-tutorial --template vue
# npm 7+, extra double-dash is needed:
npm create vite@latest event-bus-tutorial -- --template vue- 導(dǎo)航到 event-bus-tutorial 目錄并使用 npm 安裝所需的依賴項(xiàng):
cd event-bus-tutorial
npm install在 Vue 2 中使用事件總線模式
在 Vue 2.x 中,Vue 實(shí)例可用于觸發(fā)通過(guò)事件發(fā)射器 API($on、$off 和$once) 強(qiáng)制附加的處理程序。
為了使用事件總線模式,你所要做的就是創(chuàng)建一個(gè) Vue 構(gòu)造函數(shù)的新實(shí)例,將該實(shí)例分配給一個(gè)名為 eventBus 的常量變量,然后將其導(dǎo)出。這個(gè)實(shí)例充當(dāng)事件總線,允許 Vue 應(yīng)用程序中的不同組件相互通信:
// eventBus.js
const eventBus = new Vue()
export default eventBus導(dǎo)入 eventBus 實(shí)例并在要接收事件的組件中,添加事件偵聽(tīng)器:
// ChildComponent.vue
import 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')
}
}導(dǎo)入eventBus實(shí)例并在要發(fā)送事件的組件中,添加事件發(fā)射器:
// ParentComponent.vue
import eventBus from './eventBus'
export default {
methods: {
sendCustomEvent() {
// sending the event
eventBus.$emit('custom-event')
}
}
}Vue 3 中的事件總線入門
在 Vue 3 中, $on 、 $off 和 $once 方法已從 Vue 實(shí)例中完全刪除。因此,為了使用事件總線模式,必須安裝外部事件發(fā)射器和偵聽(tīng)器包,例如 mitt。
使用以下命令安裝 mitt 包并開(kāi)始提供應(yīng)用程序:
npm install --save mitt
npm run devmain.js 打開(kāi)位于目錄 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 = emitter
app.mount('#app')這段代碼通過(guò)創(chuàng)建一個(gè)發(fā)射器實(shí)例,使其通過(guò) Vue 應(yīng)用程序?qū)嵗衷L問(wèn),并將應(yīng)用程序掛載到 DOM 中,將 mitt 事件發(fā)射器庫(kù)與 Vue 3 應(yīng)用程序集成。這允許組件使用發(fā)射器發(fā)出和偵聽(tīng)事件,而無(wú)需直接導(dǎo)入。
創(chuàng)建我們的子組件
在我們的演示中,我們將創(chuàng)建兩個(gè)子組件,它們需要在不使用父組件作為中介的情況下相互通信。首先,在 components 目錄中創(chuàng)建一個(gè)名為Child1.vue的新文件,并將以下代碼塊粘貼到其中:
總體而言,此代碼呈現(xiàn)一個(gè) 在 這個(gè) Vue 組件渲染一個(gè) 現(xiàn)在,轉(zhuǎn)到您的 在 現(xiàn)在,兩個(gè)組件已準(zhǔn)備就緒,您可以在組件中偵聽(tīng) 在這里, 該方法 設(shè)置事件后,我們需要讓第二個(gè)組件偵聽(tīng)并響應(yīng)事件。打開(kāi)文件 該代碼使用 該 單擊組件上的“Increment”按鈕時(shí), 在大多數(shù)情況下,不建議使用全局事件總線來(lái)促進(jìn)組件之間的通信。雖然它最初似乎是最簡(jiǎn)單的解決方案,但隨著時(shí)間的推移,它經(jīng)常導(dǎo)致重大的維護(hù)挑戰(zhàn)。 根據(jù)具體情況,Vue 開(kāi)發(fā)團(tuán)隊(duì)推薦了幾種替代方法,而不是依賴事件總線: 這是對(duì) Vue.js 中事件總線的介紹。事件總線充當(dāng)組件之間易于實(shí)現(xiàn)的獨(dú)立通信,無(wú)需通過(guò)中央組件或父組件。 雖然事件總線最初似乎是組件間通信的便捷方法,但建議探索替代選項(xiàng),例如provide/inject或全局狀態(tài)管理。這些替代方案為促進(jìn)組件之間的通信提供了更強(qiáng)大且可維護(hù)的解決方案。。該組件還具有內(nèi)部數(shù)據(jù)屬性counter 設(shè)置為0和空methods屬性。components目錄中創(chuàng)建一個(gè)名為Child2.vue的新文件,并在其中粘貼以下代碼塊:
{{ counter }}
的組件。該
counter 值動(dòng)態(tài)顯示在標(biāo)題中。App.vue文件并將其整個(gè)代碼替換為以下內(nèi)容:
App.vue 組件內(nèi)部,代碼導(dǎo)入并呈現(xiàn)樣式化的父 div 中的 Child1和Child2 組件。設(shè)置事件
Child2 事件時(shí),通過(guò)在 Child1 組件中發(fā)出來(lái)設(shè)置事件。打開(kāi)文件 Child1.vue 并將以下代碼塊復(fù)制到其中:
onclick事件偵聽(tīng)器被添加到 button 元素中。觸發(fā)此事件時(shí),將調(diào)用名為 sendEvent() 的方法。 sendEvent() 將計(jì)數(shù)器值遞增 1,并使用全局事件發(fā)射器向任何父組件或同級(jí)組件發(fā)出具有更新 counter 值的事件 increment 。監(jiān)聽(tīng)和響應(yīng)事件
Child2.vue 并復(fù)制到以下代碼塊中:
{{ counter }}
mounted生命周期掛鉤在應(yīng)用程序掛載到 DOM 上時(shí)初始化偵聽(tīng)過(guò)程。emitter.on語(yǔ)句現(xiàn)在正在偵聽(tīng) increment 事件,向下傳遞data參數(shù),并將其設(shè)置為新計(jì)數(shù)器:increment 事件將與更新 counter 的值一起發(fā)送到 Child2和 Child1 組件。Vue.js中事件總線的當(dāng)前狀態(tài)
總結(jié)
新聞標(biāo)題:在Vue.js中使用事件總線在組件之間傳遞數(shù)據(jù)
分享地址:http://fisionsoft.com.cn/article/ccedjei.html
其他資訊


咨詢
建站咨詢
