hgo*_*ebl 48 typescript angular2-router angular2-router3 angular
我发现许多ActivatedRouteObservables喜欢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);
}
Run Code Online (Sandbox Code Playgroud)
Observable?Router.routerState?Mil*_*lad 93
来自文档:
订阅组件中的observable时,您几乎总是安排在组件被销毁时取消订阅.
有一些特殊的可观测量,这是没有必要的.ActivatedRoute可观察量是例外.
ActivatedRoute及其可观察对象与路由器本身绝缘.当不再需要路由器时,路由器会销毁路由组件,并且注入的ActivatedRoute会随之消失.
无论如何,请随意取消订阅.它是无害的,从来都不是一种糟糕的做法.
作为获奖的答案报价关于subscriptions到ActivatedRoute,角unsubscribes自动。
如果您想知道如何unsubscribe从Observables:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当路由器导航到不同的路由时,组件将被销毁并且routerState将变为未引用,这将使它们可以自由地收集垃圾,包括可观察的.
如果您将对此组件的引用传递给其他组件或服务,则该组件将不会被垃圾回收并且订阅将保持活动状态,但我确信(无需验证)在浏览时路由器将完成observable离开并导致订阅取消.
| 归档时间: |
|
| 查看次数: |
13607 次 |
| 最近记录: |