// 手寫EventBus
class EventBus{
constructor(){
this._event = {}
}
// 注冊(cè)
$on(eventName,fn){
this._event[eventName] = this._event[eventName] || []
this._event[eventName].push(fn)
}
// 觸發(fā)
$emit(eventName,args){
if(!this._event[eventName]) {
console.log('未注冊(cè)該事件');
return // 未注冊(cè)該事件
}
this._event[eventName].forEach(fn => {
fn(args)
});
}
// 移除
$remove(eventName,fn){
if(!this._event[eventName]){
console.log('未綁定該事件');
return // 未綁定該事件
}
if(!fn){
delete this._event[eventName]
return
}
const eventHandler = this._event[eventName]
const handlerIndex = eventHandler.findIndex(it => it === handler)
this._event[eventName].splice(handlerIndex,1)
if(this._event[eventName].length === 0){
delete this._event[eventName]
}
}
$once(eventName,args){
this.$emit(eventName,args)
this.$remove(eventName)
}
}
const event_bus = new EventBus
const fn1 = (param) => {
console.log('fn1',param)
}
event_bus.$on('testfunc',fn1)
event_bus.$once('testfunc',123)
event_bus.$emit('testfunc',123)
EventBus 事件總線
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Preference -> Plugins install完重啟AS即可。
- EventBus EventBus 是一個(gè) Android 事件發(fā)布/訂閱框架,通過解耦發(fā)布者和訂閱者簡化 And...
- 一.事件總線模式的產(chǎn)生背景以及意義? 二.EventBus 如何使用? 三.EventBus 如何工作? 注冊(cè)了訂...
- 在Android的實(shí)際開發(fā)中,消息的通信是非常頻繁的。結(jié)合Android的基礎(chǔ)知識(shí),常用的通信方式有Intent、...
- 理論千萬篇,不如實(shí)戰(zhàn)來一篇。 源碼 https://github.com/harvie1208/EventBus ...