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),傳參去調用;
由于函數(shù)是對象,內存地址未發(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)時 ,將注冊進去的 ,訂閱函數(shù)的數(shù)組刪除,避免存放越來越多。
步驟三 ( 發(fā)布者 )
在 comB.vue 中發(fā)布;
調用訂閱 并傳參;
<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í)行,注意對應的 訂閱和發(fā)布的name 要相同。
總結
到此這篇關于vue3如何使用eventBus訂閱發(fā)布模式的文章就介紹到這了,更多相關vue3 eventBus訂閱發(fā)布模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VUE的history模式下除了index外其他路由404報錯解決辦法
在本篇文章里小編給大家分享的是關于VUE的history模式下除了index外其他路由404報錯解決辦法,對此有需要的朋友們可以學習下。2019-08-08
vue.js通過自定義指令實現(xiàn)數(shù)據(jù)拉取更新的實現(xiàn)方法
數(shù)據(jù)拉取更新這個功能相信大家基本都見過,但是如果要做起來卻不止如何做起,所以這篇文章給大家分享了vue.js通過自定義指令實現(xiàn)的方法,閱讀本文需要對vue有一定理解,有需要的朋友們下面來一起看看吧。2016-10-10

