我的代码:
ngOnInit() {
this.activatedRoute.params.subscribe((params: Params) => {
// do stuff
})
this.activatedRoute.data.subscribe((data: any) => {
// do stuff
})
}
我的问题是...我需要在ngOnDestroy中取消订阅吗?
出于习惯,我总是退缩,但不确定在这里是否有必要。
谢谢
答案 0 :(得分:2)
不,您不需要取消订阅可观测路线
订阅组件中的可观察对象时,您几乎总是 安排在组件销毁时退订。
有一些不需要观察的例外观察点。 可观察到的ActivatedRoute除外。
ActivatedRoute及其可观察物与路由器绝缘 本身。当路由组件不再存在时,它会销毁它 需要,注入的ActivatedRoute随之死亡。
随时可以退订。它是无害的,永远不会坏 练习。
答案 1 :(得分:2)
我宁愿取消所有订阅然后控制例外。似乎更易于维护。
类似这样的东西
ngOnInit() {
this.subscriptions.push(
this.activatedRoute.params.subscribe((params: Params) => {
// do stuff
}));
this.subscriptions.push(
this.activatedRoute.data.subscribe((data: any) => {
// do stuff
}));
}
ngOnDestroy() {
this.subscriptions.forEach((subscription: Subscription) => {
subscription.unsubscribe();
});
}
请在此处查看示例:https://stackblitz.com/edit/angular-unsubscribing-then-all?file=src/app/app.component.ts
答案 2 :(得分:1)
对于激活的路由,可观察到的是一个例外,因为The ActivatedRoute and its observables are insulated from the Router itself. The Router destroys a routed component when it is no longer needed and the injected ActivatedRoute dies with it.
来源:Angular Doc
答案 3 :(得分:1)
通常,当您的组件销毁时,所有订阅的可观察对象都会自动取消订阅,只有少数例外。但是activatedRoute并不是其中之一。当路由器从路由组件退出时,它将破坏该组件以及注入的activatedRoute