angular - 退订后无法重新订阅主题
问题描述
当我更改路由并返回订阅主题的同一路由时,每次更改路由时都会创建一个重复的侦听器。
为了阻止这种情况,我使用了主题的取消订阅功能,但问题出现在取消订阅主题之后。我无法再次订阅,也无法收听活动。
socketservices.ts
:
connect(): Rx.BehaviorSubject<MessageEvent> {
// We define our observable which will observe any incoming messages
// from our socket.io server.
let observable = new Observable(observer => {
this.socket.on('message', (data) => {
observer.next(data);
})
return () => {
this.socket.disconnect();
}
});
// We define our Observer which will listen to messages
// from our other components and send messages back to our
// socket server whenever the `next()` method is called.
let observer = {
next: (data: Object) => {
console.log('sending message')
this.socket.emit('message', JSON.stringify(data));
},
};
// we return our Rx.Subject which is a combination
// of both an observer and observable.
return Rx.BehaviorSubject.create(observer, observable);
}
admincomponent.ts
:
//constructor includes public webSoc:SocketServiceService
this.subscription = this.webSoc.connect().subscribe(data=>{
if (data['response'] == "dvc_board") {
console.log('listening')
this._updatebins()
}
})
解决方案
推荐阅读
- python - 使用 Python 进行 DDD:我做对了吗?
- bamboo-specs - 组织包含多个 Bamboo Specs 配置的存储库的最佳方式是什么?
- c# - 从 asp.net 中的 API 获取数据
- swift - Xcode / plist - 在 macOS 上始终以 Dark/Light 主题运行应用程序
- oracle - DatabaseError:尝试检索错误 ORA-12154 的文本时出错 - Google Colab
- angular - 在 Auth0 中检索用户配置文件信息
- javascript - 在javascript中构建一个自迭代表?
- tensorflow - 增强数据集真的会改善 ML 模型吗
- desktop-application - 不同的小部件/窗口如何在 openfin 中进行通信
- python - Django如何只用小时和分钟来管理格式时间