angular2 监听路由变化

最近在项目中,有个需求:需要监控路由变化实现某个功能,所以研究了一番官网和路由相关的api

router.events()是一个observable对象,我们可以通过订阅它来获取路由变化的相关信息

evnets提供了以上诸多类型的事件,方便我们根据事件的类型进行过滤(关于rxjs的过滤操作就不再介绍)

constructor(private ref: ChangeDetectorRef, private router: Router) {
}
ngOnInit() {
  this.routerEventsListener = this.router.events
  .filter(event => event instanceof NavigationEnd) //根据事件的类型进行过滤
  .subscribe((event) => {
    // your operation
    this.ref.detectChanges(); //我的操作
  });
}

大家一定要注意保护自己的操作,因为router.events是全局的,所以在组件内使用时,最好在ngOndestory()中unsubscribe,笔者进行了手动触发变更检测的操作,导致在其他页面路由跳转时,直接挂掉,原因是this.router.events所在组件此时已经被销毁,自然也就无法触发组件的模板更新。

ngOnDestroy() {
  this.routerEventsListener.unsubscribe();
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容