vue3如何使用eventBus訂閱發(fā)布模式
Ⅰ. 什么是eventBus?
通俗的講,就是在任意一個(gè)組件,想把消息(參數(shù)) -> 傳遞到任意一個(gè)組件 ,并執(zhí)行一定邏輯。
Ⅱ. vue3 如何使用
eventBus vue3中沒有了,eventBus,所以我們要自己寫,但是非常簡(jiǎn)單。
步驟一 (eventBus 容器)
在src目錄,創(chuàng)建個(gè)bus文件夾,存放 自己寫的 bus.js ;
編寫 bus.js => 在class 原型上綁定三個(gè) (訂閱,取消訂閱,發(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ù)是對(duì)象,內(nèi)存地址未發(fā)生變化,還在在訂閱者(on)組件中執(zhí)行。
步驟二 ( 訂閱者 )
在 comA.vue 中訂閱;
訂閱只是 存放函數(shù),并未執(zhí)行,等發(fā)布后才會(huì)執(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; })
//組件卸載時(shí),取消訂閱
onUnmounted( () => { Bus.$off('addAge') } )
}
}
</script>
在離開組件(onUnmounted)時(shí) ,將注冊(cè)進(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ā)布后,在訂閱者的組件就會(huì)執(zhí)行,注意對(duì)應(yīng)的 訂閱和發(fā)布的name 要相同。
總結(jié)
到此這篇關(guān)于vue3如何使用eventBus訂閱發(fā)布模式的文章就介紹到這了,更多相關(guān)vue3 eventBus訂閱發(fā)布模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3使用v-html實(shí)現(xiàn)文本關(guān)鍵詞變色處理
遍歷文本內(nèi)容,找到關(guān)鍵詞,并使用某種方法更改其字體樣式,經(jīng)過搜尋資料決定采用v-html實(shí)現(xiàn),但是v-html本身并不安全,有安全性風(fēng)險(xiǎn)且影響性能,所以謹(jǐn)慎使用,本文給大家介紹了Vue3使用v-html實(shí)現(xiàn)文本關(guān)鍵詞變色處理,需要的朋友可以參考下2024-06-06
VueJS 組件參數(shù)名命名與組件屬性轉(zhuǎn)化問題
這篇文章主要介紹了VueJS 組件參數(shù)名命名與組件屬性轉(zhuǎn)化問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12
Vue驗(yàn)證碼60秒倒計(jì)時(shí)功能簡(jiǎn)單實(shí)例代碼
這篇文章主要介紹了Vue驗(yàn)證碼60秒倒計(jì)時(shí)功能簡(jiǎn)單實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
VUE的history模式下除了index外其他路由404報(bào)錯(cuò)解決辦法
在本篇文章里小編給大家分享的是關(guān)于VUE的history模式下除了index外其他路由404報(bào)錯(cuò)解決辦法,對(duì)此有需要的朋友們可以學(xué)習(xí)下。2019-08-08
vue3實(shí)現(xiàn)按鈕權(quán)限管理的項(xiàng)目實(shí)踐
在做后臺(tái)管理系統(tǒng)時(shí),經(jīng)常會(huì)有權(quán)限管理的功能,本文主要介紹了vue3實(shí)現(xiàn)按鈕權(quán)限管理的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
詳解vue-cli 腳手架項(xiàng)目-package.json
本篇文章主要介紹了詳解vue-cli 腳手架項(xiàng)目-package.json,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
ant design vue導(dǎo)航菜單與路由配置操作
這篇文章主要介紹了ant design vue導(dǎo)航菜單與路由配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue.js通過自定義指令實(shí)現(xiàn)數(shù)據(jù)拉取更新的實(shí)現(xiàn)方法
數(shù)據(jù)拉取更新這個(gè)功能相信大家基本都見過,但是如果要做起來卻不止如何做起,所以這篇文章給大家分享了vue.js通過自定義指令實(shí)現(xiàn)的方法,閱讀本文需要對(duì)vue有一定理解,有需要的朋友們下面來一起看看吧。2016-10-10

