我正在使用Observable监听套接字并在我的一个组件中订阅它。如果我没有在ngOnDestroy
中取消订阅,当我再次访问该组件时,它会触发N次(N是我切换回该组件的次数)但如果我在{{1}中取消订阅它那么它会在我第一次去那个组件的时候听,当我去其他组件并返回时,它就不会开火了。
ngOnDestroy
在监听组件的构造函数中
//in socket service
updateOrder() {
if (!this.socket.connected)
this.socket.connect();
let observable = new Observable < any > (observer => {
this.socket.on('test', (data) => {
observer.next(data); //going into here
});
return () => {
this.socket.disconnect();
};
})
return observable;
}
this.orderSubscriber = this.socketService.updateOrder().subscribe(data => {
console.log('socket fired', data);
})
答案 0 :(得分:1)
回答我自己的问题。使用socket.removeListener('test')
而非socket.disconnect()
已解决。谢谢指导我解决问题的人。
//in socket service
updateOrder() {
let observable = new Observable < any > (observer => {
this.socket.on('test', (data) => {
observer.next(data);
});
return () => {
this.socket.removeListener('test')
};
})
return observable;
}
&#13;