我找到了许多示例,其中ActivatedRoute
可观察到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
S?
中取消订阅 - 如果没有,您可以解释
Router
中激活的对象树的发生的情况。routerState
?
no
来自文档:
在组件中订阅可观察到的时,您几乎总是安排在销毁组件时取消订阅。
很少有例外的观察到这是不需要的。ActivatedRoute可观测值是例外。
激活的环绕及其可观察物与路由器本身绝缘。路由器不再需要时会破坏路由组件,并且注入了激活的部件会死亡。
无论如何都可以随意取消订阅。这是无害的,从来没有不良的做法。
作为有关subscriptions
至ActivatedRoute
的获胜答案引号,Angular unsubscribes
自动。
路由器不再需要时会破坏路由组件,并且注入了激活的部件与之死亡。
如果您想知道如何从Observables
了解unsubscribe
:
import { Component,
OnInit,
OnDestroy } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
// Type
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'app-example',
templateUrl: './example.component.html',
styleUrls: ['./example.component.scss']
})
export class ExampleComponent implements OnInit, OnDestroy {
paramsSubscription : Subscription;
constructor(private activatedRoute : ActivatedRoute) { }
/* Angular lifecycle hooks
*/
ngOnInit() {
console.log("Component initialized");
this.paramsSubscription = this.activatedRoute.params.subscribe( params => {
});
}
ngOnDestroy() {
console.log("Component will be destroyed");
this.paramsSubscription.unsubscribe();
}
}
当路由器导航到其他路线时,组件将被破坏,路由器state将不参考,这将使它们免费收集垃圾。
。如果将此组件的引用传递给其他组件或服务,则该组件不会收集垃圾,并且订阅将保持活跃,但是我敢肯定(不核实)可观察到的可观察到可观察到的路由器驶离并导致订阅取消。
每当您将订阅添加到组件时,当组件被破坏时,几乎总是需要取消订阅。但是订阅激活的路由参数不需要退订,因为路由器在不再需要的情况下会破坏订阅。
http可观察到的调用,路由器可观察者不需要手动订阅。如果您处理其他可观察的可观察或可观察到的,则应在ngondestroy()上进行。您可以在官方对象中调用unsubscribe()方法在其中存储在组件中。