如何获得可观察的url,以便每当它更改时,我都可以在代码中进行更改?

时间:2019-04-07 19:55:49

标签: angular

我需要在我的角度应用程序中订阅url更改,我需要根据url操作标题文件。我已经尝试过ActivatedRoute.url,但它给出的网址是空的,并且当网址更改时也不会触发订阅。

2 个答案:

答案 0 :(得分:1)

您可以通过将Router注入组件中来实现。我通常在AppComponent中进行此操作,因此它在全球范围内都发生在我的角度网站上,以进行类似Google Analytics(分析)的跟踪。

export class AppComponent implements OnInit {

  constructor(private router: Router) {
    router.events.subscribe(x => {
      // only interested in the NavigationEnd type of event
      if (!(x instanceof NavigationEnd)) {
        return;
      }

      // Do stuff here
    });
  }
}

答案 1 :(得分:1)

ActivatedRoute仅提供与注入ActivatedRoute的组件相对应的路由信息​​。

根据您的实际需求,我建议以下解决方案之一:

  • 订阅叶组件,然后使用用于在叶组件和头之间共享Subject的服务将事件转发到标头
  • 根据我的最佳解决方案:在标题中插入Router并订阅router.events

示例:

router.events.pipe(
      filter(x => x instanceof NavigationEnd)
    ).subscribe(x => {
        // Do whatever you want with x.url
    });