我找到许多例子,其中 ActivatedRoute
Observables如 params
或 url
订阅但未取消订阅 .
constructor(private route: ActivatedRoute) {}
ngOnInit() {
this.route.params
// (+) converts string 'id' to a number
.switchMap((params: Params) => this.service.getHero(+params['id']))
.subscribe((hero: Hero) => this.hero = hero);
}
-
路径对象和订阅是否自动销毁并为每个组件创建新创建?
-
我是否需要关心取消订阅
Observable
? -
如果没有,你能解释一下
Router
中ActivatedRoute对象树会发生什么 .routerState
?
4 回答
From the docs:
订阅组件中的observable时,您几乎总是安排在组件被销毁时取消订阅 .
有一些特殊的可观测量,这是没有必要的 . ActivatedRoute可观察量是例外 .
ActivatedRoute及其可观察对象与路由器本身绝缘 . 当不再需要路由器时,路由器会销毁路由组件,并且注入的ActivatedRoute会随之消失 .
无论如何,请随意取消订阅 . 它是无害的,从来都不是一种糟糕的做法 .
当路由器导航到不同的路由时,组件将被销毁并且routerState将变为未引用,这将使它们可以自由地收集垃圾,包括可观察的 .
如果您将对此组件的引用传递给其他组件或服务,则该组件将不会被垃圾回收并且订阅将保持活动状态,但我确信(无需验证)在浏览时路由器将完成observable离开并导致订阅取消 .
作为获胜答案quotes关于
subscriptions
至ActivatedRoute
,Angularunsubscribes
自动 .如果你想知道如何从
Observables
unsubscribe
:每当您添加订阅组件时,您总是几乎需要在组件被销毁时取消订阅 . 但订阅Activated route params不需要取消订阅,因为路由器会在不再需要时销毁订阅 .