销毁任何组件时,退订/取消所有http请求

时间:2018-12-13 20:13:40

标签: angular rxjs

我们有许多组件会发出http请求以获取其数据。我的任务是在组件被销毁时取消http请求。因此,我可以做的是进入每个单独的组件,实现ngOnDestroy(),并将http订阅存储为该组件类的成员,但是我们有太多的组件可供我逐一进行。

有没有办法告诉angular当任何组件被销毁时,取消其所有http请求?

1 个答案:

答案 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的旧版本。)