Angular 9 取消订阅 NavigationEnd

标签 angular typescript angular9

我在路由器 NavigationEnd 上使用订阅,如下所示:

this.router.events
  .subscribe((event) => {
    if (event instanceof NavigationEnd) {
      this.getData();
    }
  });

当我在同一 route 导航时,例如,我需要它来更新页面数据。/product1 和/product2 使用相同的组件和路由,并在自定义路由服务中处理

这是为了在同一组件中的路由更新时获取数据,并且它按预期工作

问题是 this.getData() 在导航到另一个组件时也会运行,这在我导航到的组件中产生了很多问题,而且我还从服务器运行了不必要的获取

所以问题是:当我离开组件时可以取消订阅路由器,这样 this.getData() 就不会运行吗?

最佳答案

您可以在Observables中使用订阅

首先在您的组件上进行初始化

navigationSubs = new Subscription();


this.navigationSubs = this.router.events
  .subscribe((event) => {
    if (event instanceof NavigationEnd) {
      this.getData();
    }
  });

销毁时或任何您想要的时候

this.navigationSubs.unsubscribe();

关于Angular 9 取消订阅 NavigationEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60488097/

相关文章:

javascript - Angular 6 - httpClient不向特定网址发送获取请求

javascript - 在 Angular 8 中注入(inject)服务的正确方法是什么?

javascript - 如何指定文件夹内的所有 typescript 文件作为 grunt 的源?

angular - 无法将第二个数组绑定(bind)到 angular-dual-listbox

angular - TypeScript: '(error: any) => void' 类型的参数不可分配给类型的参数

Angular 错误处理程序在 aot 包上包含组件

TypeScript 变量与导入

javascript - 编译 TypeScript 时忽略类型错误,但不忽略语法错误

angular - 如何停止在 Angular 垫片中添加新值和重复值?

angular - Angular 编译器中的错误需要 TypeScript >=3.6.4 和 <3.8.0,但找到了 3.8.2