我们有许多组件会发出http请求以获取其数据。我的任务是在组件被销毁时取消http请求。因此,我可以做的是进入每个单独的组件,实现ngOnDestroy()
,并将http订阅存储为该组件类的成员,但是我们有太多的组件可供我逐一进行。
有没有办法告诉angular当任何组件被销毁时,取消其所有http请求?
答案 0 :(得分:2)
另一种选择是定义更好的订阅模式,因此您无需取消订阅。
例如,您可以执行以下操作:
export class ProductEditComponent implements OnInit, OnDestroy {
componentActive = true;
ngOnInit(): void {
// Watch for changes to the currently selected product
this.store.pipe(
select(fromProduct.getCurrentProduct),
takeWhile(() => this.componentActive)
).subscribe(
currentProduct => this.displayProduct(currentProduct)
);
ngOnDestroy(): void {
this.componentActive = false;
}
}
请注意takeWhile
。这样可以确保在破坏组件时停止所有订阅。
您可以在此处找到更多信息:this answer(但请注意,本文中显示的代码适用于RxJS的旧版本。)