vue3如何使用eventBus訂閱發(fā)布模式
Ⅰ. 什么是eventBus?
通俗的講,就是在任意一個組件,想把消息(參數(shù)) -> 傳遞到任意一個組件 ,并執(zhí)行一定邏輯。
Ⅱ. vue3 如何使用
eventBus vue3中沒有了,eventBus,所以我們要自己寫,但是非常簡單。
步驟一 (eventBus 容器)
在src目錄,創(chuàng)建個bus文件夾,存放 自己寫的 bus.js ;
編寫 bus.js => 在class 原型上綁定三個 (訂閱,取消訂閱,發(fā)布)函數(shù);
// bus.js class Bus { constructor() { this.list = {}; // 收集訂閱 } // 訂閱 $on(name, fn) { this.list[name] = this.list[name] || []; this.list[name].push(fn); } // 發(fā)布 $emit(name, data) { if (this.list[name]) { this.list[name].forEach((fn) => { fn(data); }); } } // 取消訂閱 $off(name) { if (this.list[name]) { delete this.list[name]; } } } export default new Bus;
訂閱者(on),講函數(shù)放入 list 中 => 等待發(fā)布者(emit),傳參去調(diào)用;
由于函數(shù)是對象,內(nèi)存地址未發(fā)生變化,還在在訂閱者(on)組件中執(zhí)行。
步驟二 ( 訂閱者 )
在 comA.vue 中訂閱;
訂閱只是 存放函數(shù),并未執(zhí)行,等發(fā)布后才會執(zhí)行;
<template> <div> {{ name }} --- {{ age }} </div> </template> <script> import {ref , onUnmounted} from 'vue'; import Bus from '../bus/bus.js'; export default { setup() { const name = '張三'; const age = ref(18) Bus.$on('addAge',({ num })=>{ age.value = num; }) //組件卸載時,取消訂閱 onUnmounted( () => { Bus.$off('addAge') } ) } } </script>
在離開組件(onUnmounted)時 ,將注冊進(jìn)去的 ,訂閱函數(shù)的數(shù)組刪除,避免存放越來越多。
步驟三 ( 發(fā)布者 )
在 comB.vue 中發(fā)布;
調(diào)用訂閱 并傳參;
<template> <button @click="fabu">發(fā)布</button> </template> <script> import Bus from '../eventBus/Bus.js' export default { setup() { function fabu(){ Bus.$emit('addAge',{age:'19'}); } } } </script>
發(fā)布后,在訂閱者的組件就會執(zhí)行,注意對應(yīng)的 訂閱和發(fā)布的name 要相同。
總結(jié)
到此這篇關(guān)于vue3如何使用eventBus訂閱發(fā)布模式的文章就介紹到這了,更多相關(guān)vue3 eventBus訂閱發(fā)布模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目或網(wǎng)頁上實(shí)現(xiàn)文字轉(zhuǎn)換成語音播放功能
這篇文章主要介紹了在vue項(xiàng)目或網(wǎng)頁上實(shí)現(xiàn)文字轉(zhuǎn)換成語音,需要的朋友可以參考下2020-06-06解決找不到模塊“xxx.vue”或其相應(yīng)的類型聲明問題
這篇文章主要介紹了解決找不到模塊“xxx.vue”或其相應(yīng)的類型聲明問題,具有很好的參考價值,希望對大家有所幫助。2022-10-10vue第三方庫中存在擴(kuò)展運(yùn)算符報錯問題的解決方案
這篇文章主要介紹了vue第三方庫中存在擴(kuò)展運(yùn)算符報錯問題,本文給大家分享解決方案,通過結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07vue 2 實(shí)現(xiàn)自定義組件一到多個v-model雙向數(shù)據(jù)綁定的方法(最新推薦)
有時候我們需要對一個組件綁定自定義 v-model,以更方便地實(shí)現(xiàn)雙向數(shù)據(jù),例如自定義表單輸入控件,這篇文章主要介紹了vue 2 實(shí)現(xiàn)自定義組件一到多個v-model雙向數(shù)據(jù)綁定的方法,需要的朋友可以參考下2024-07-07