方案:
订阅消息时存储被订阅消息的消息名(后面作为对象键值)和函数回调,由于可以多次订阅同一个消息,所以以数组形式存储在对应的消息名中,在发布消息时,遍历消息对应的数据,触发函数并传参,实现数据的传递,另外防止内存泄漏,需要做取消订阅,在组件销毁前删除对象中存储对应数据.
设置一个类:
设置一个对象存储被订阅的键值和对应的函数回调
class Public {
constructor() {
// 初始化一个对象,用于存储被订阅的"键"和对应的"函数回调"
this.publicList= {}
}
}
订阅消息:
publish(key, value) {
if (this.publicList[key]) {
this.publicList[key].forEach(back => {
back(value)
});
}
}
发布消息:
subscribe(key, back) {
if (this.publicList[key]) {
this.publicList[key].push(back)
} else {
this.publicList[key] = [back]
}
return { key, back }
}
取消订阅:
// 取消订阅
delBub({ key, back }) {
if (this.publicList[key]) {
this.publicList[key] = this.publicList[key].filter(item => {
return item !== back
})
}
}