class Event {
constructor() {
this.list = {} // 调度中心
}
// 订阅
on(event, fn) {
// event事件名,fn事件发布回调
(this.list[event] || (this.list[event] = [])).push(fn)
return this
}
// 发布订阅
emit() {
// emit方法取到arguments第一个值作为event
// 根据event值执行对应调度中心的订阅函数
let event = [].shift.call(arguments)
if (this.list[event]) {
this.list[event].forEach((fn) => {
fn(...arguments)
})
} else {
throw "no event"
}
}
// 取消订阅
off(event, fn) {
if (!this.list[event]) return
if (fn) {
let i = this.list[event].findIndex(v => v === fn)
i != -1 && this.list[event].splice(i, 1)
} else {
this.list[event] && (this.list[event].length = 0)
}
}
}
export default new Event()
vuex用起来太麻烦,写个小轮子bus全局通信
最新推荐文章于 2022-11-03 17:46:04 发布