在我的ngOnInit方法中,我像这样订阅路由器:
this.router.events.subscribe(
event => {
if (event instanceof NavigationEnd) this.clearMessages();
}
);
通常,对于HttpClient包之外的可观察对象,我在ngOnDestroy方法中调用取消订阅,但是当我在这里尝试时,我发现this.router.events没有这样的方法。我是错了还是这个可观察对象有什么不同?为什么不实现取消订阅?
我发现this.router.events没有这样的方法
您在订阅上调用取消订阅
,而不是可观察对象。this.router.events
是可观察的,而不是订阅。所以下面的工作:
const subscription = this.router.events.subscribe(...);
subscription.unsubscribe();
你是对的,一些可观察对象不需要手动取消订阅,例如:
first()
类似的信息也可以在这个reddit站点上找到。这也意味着无需担心这些类中的可观察对象的内存泄漏。
这是我的工作。完整的例子。
import { Subject } from 'rxjs/internal/Subject';
import { Subscription } from 'rxjs';
export class ExampleComponent implements OnInit, OnDestroy {
routerEventSubscription: Subscription;
private destroy$: Subject<boolean> = new Subject<boolean>();
ngOnInit() {
this.routerEventSubscription = this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
// your code
}
})
}
ngOnDestroy(): void {
this.routerEventSubscription.unsubscribe();
this.destroy$.next(true);
}
}