Angular 9 取消订阅 NavigationEnd

Mar*_*cus 2 typescript angular angular9

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

this.router.events
  .subscribe((event) => {
    if (event instanceof NavigationEnd) {
      this.getData();
    }
  });
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

ahm*_*cat 5

您可以SubscriptionObservables中使用

首先初始化你的组件

navigationSubs = new Subscription();


this.navigationSubs = this.router.events
  .subscribe((event) => {
    if (event instanceof NavigationEnd) {
      this.getData();
    }
  });
Run Code Online (Sandbox Code Playgroud)

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

this.navigationSubs.unsubscribe();
Run Code Online (Sandbox Code Playgroud)