当您订阅组件中的查询参数时,是否需要取消订阅?我正在努力避免内存泄漏。
带有变量的订阅
unsubscribe()
subscription$: Subscription
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.subscription$ = this.route.queryParams.subscribe(
(params: any): void => {
// ... Do stuff here ...
}
)
}
ngOnDestroy() {
if (this.subscription$ !== undefined || this.subscription$ !== null) {
this.subscription$.unsubscribe()
}
}
无变量订阅
unsubscribe()
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.queryParams.subscribe(
(params: any): void => {
// ... Do stuff here ...
}
)
}
哪一个是更好的解决方案?
当组件被销毁时,ActivatedRoute 会取消其所有订阅者的订阅。
您可以查看文档:https://angular.io/guide/router-tutorial-toh#observable-parammap-and-component-reuse
当订阅组件中的可观察对象时,您几乎总是 当组件被销毁时安排取消订阅。
有一些特殊的可观察结果是不必要的。 ActivatedRoute 可观察量是例外。
ActivatedRoute 及其可观察量与 Router 隔离 本身。当路由组件不再可用时,路由器会销毁它 需要,注入的 ActivatedRoute 随之消失。
这个问题你可以参考一下
Angular是否需要取消订阅this.activatedRoute订阅
但我想说,每当您订阅某些内容时取消订阅始终是一个好习惯。取消订阅的方式有多种,我们只需使用一个额外的订阅变量即可做到这一点
在这种情况下我也总是更喜欢取消订阅