【发布时间】:2018-01-02 04:31:37
【问题描述】:
根据我对 Angular 和 RxJs 的理解,有两种方法可以终止 Observables。您可以从他们那里unsubscribe() 或使用takeUntil() 和complete()。以下是每种方法的示例(以伪代码形式)。
unsubscribe() 方法
private _id: number;
private _subscriptions: Subscription[] = [];
constructor(private _route: ActivatedRoute) {
this._getId();
}
public ngOnDestroy(): void {
this._subscriptions.forEach(
subscription => subscription.unsubscribe()
);
}
private _getId(): void {
this._subscriptions.push(
this._route.params.subscribe(params => this._id = +params['id'])
);
}
takeUntil() 和 complete() 方法
private _id: number;
private _ngUnsubscribe: Subject<void> = new Subject<void>();
constructor(private _route: ActivatedRoute) {
this._getId();
}
public ngOnDestroy(): void {
this._ngUnsubscribe.next();
this._ngUnsubscribe.complete();
}
private _getId(): void {
this._route.params.takeUntil(this._ngUnsubscribe).subscribe(
params => this._id = +params['id']
);
}
在 Angular 中,是否存在终止 Observables 的首选方式?
【问题讨论】:
-
首选方式是
ngOnDestroy,您正在这样做。我唯一要补充的是检查这些值是否“真实”,即不为空或未定义,否则尝试调用unsubscribe()时会出错。 -
请注意,您通常不需要终止常见的可观察对象,例如示例中的路由器参数。 Angular 会自动终止它们。请参阅文档这部分底部附近的注释:angular.io/guide/…
标签: angular rxjs rxjs5 angular2-observables unsubscribe