在我的 ngOnInit 方法中,我按照以下方式订阅了路由器:
this.router.events.subscribe(
event => {
if (event instanceof NavigationEnd) this.clearMessages();
}
);
通常,对于 HttpClient 包之外的 Observables ,我在 ngOnDestroy 方法中调用取消订阅,但是当我试过这里,我发现 this.router.events 没有这样的方法。我错了或者 Observable 有什么不同吗?为什么取消订阅无法实施?
答案 0 :(得分:6)
我发现this.router.events没有这样的方法
您在订阅上调用unsubscribe
,而不是可观察对象。 this.router.events
是可观察的,而不是订阅。所以以下方法可行:
const subscription = this.router.events.subscribe(...);
subscription.unsubscribe();
答案 1 :(得分:2)
你是对的,一些可观察者不需要手动取消订阅,可观察者如:
first()
类似的信息也可以在this reddit site找到。这也意味着无需担心这些类中的可观察对象的内存泄漏。