看个具体的例子:

在app.component.ts里注入Router:

export class AppComponent {constructor(router:Router){console.log('Checking router');router.events.pipe(filter(e => e instanceof ActivationStart)).subscribe(e =>{console.log('路由开始了', e);});router.events.subscribe(e => {console.log('all events: ', e);});}
}

events是个Observable,一旦其next方法被调用,我们使用subscribe注册的回调就会被触发。

首先的event名称为:NavigationStart

注意:我的应用代码里,这个events Observable有两个subscriber,分别罗列如下:

router.events两次调用subscribe之后,它拥有了两个Observables:


这里,Router.js主动发起next调用,传入的对象就是NavigationStart:

第二个事件是RoutesRecognized:

第三个事件:

GuardsCheckStart:

这里依次fire余下的事件:

function runCanActivateChecks(futureSnapshot, checks, moduleInjector, forwardEvent) {return from(checks).pipe(concatMap((/*** @param {?} check* @return {?}*/(check) => {return from([fireChildActivationStart(check.route.parent, forwardEvent),fireActivationStart(check.route, forwardEvent),runCanActivateChild(futureSnapshot, check.path, moduleInjector),runCanActivate(futureSnapshot, check.route, moduleInjector)]).pipe(concatAll(), first((/*** @param {?} result* @return {?}*/result => {return result !== true;}), (/** @type {?} */ (true))));})), first((/*** @param {?} result* @return {?}*/result => {return result !== true;}), (/** @type {?} */ (true))));
}

all events:  NavigationStart {id: 1, url: "/", navigationTrigger: "imperative", restoredState: null}
14:37:43.263 core.js:40855 Angular is running in the development mode. Call enableProdMode() to enable the production mode.
14:39:51.283 app.component.ts:69 all events:  RoutesRecognized {id: 1, url: "/", urlAfterRedirects: "/", state: RouterStateSnapshot}
14:40:33.209 app.component.ts:69 all events:  GuardsCheckStart {id: 1, url: "/", urlAfterRedirects: "/", state: RouterStateSnapshot}
14:42:09.156 app.component.ts:69 all events:  ChildActivationStart {snapshot: ActivatedRouteSnapshot}
14:42:09.161 app.component.ts:65 路由开始了 ActivationStart {snapshot: ActivatedRouteSnapshot}
14:42:12.720 app.component.ts:69 all events:  ActivationStart {snapshot: ActivatedRouteSnapshot}
14:42:12.722 app.component.ts:69 all events:  GuardsCheckEnd {id: 1, url: "/", urlAfterRedirects: "/", state: RouterStateSnapshot, shouldActivate: true}
14:42:12.722 app.component.ts:69 all events:  ResolveStart {id: 1, url: "/", urlAfterRedirects: "/", state: RouterStateSnapshot}
14:42:12.723 app.component.ts:69 all events:  ResolveEnd {id: 1, url: "/", urlAfterRedirects: "/", state: RouterStateSnapshot}
14:42:12.726 (index):16 trying to create new tag: wild
14:42:12.729 (index):16 trying to create new tag: h1
14:42:12.731 app.component.ts:69 all events:  ActivationEnd {snapshot: ActivatedRouteSnapshot}
14:42:12.732 app.component.ts:69 all events:  ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
14:42:12.733 app.component.ts:69 all events:  NavigationEnd {id: 1, url: "/", urlAfterRedirects: "/"}
14:42:12.734 app.component.ts:69 all events:  Scroll {routerEvent: NavigationEnd, position: null, anchor: null}
14:42:13.372

更多Jerry的原创文章,尽在:“汪子熙”:

如何通过ActivationStart监控 Angular的路由激活事件相关推荐

  1. angular复用路由组件_Angular Router的组件路由简介

    angular复用路由组件 这是SitePoint Angular 2+教程的第4部分,有关如何使用Angular CLI创建CRUD应用程序. 在本文中,我们将介绍Angular Router,并了 ...

  2. angular 前端路由不生效解决方案

    angular 前端路由不生效解决方案 参考文章: (1)angular 前端路由不生效解决方案 (2)https://www.cnblogs.com/weihanli/p/fix-angular-f ...

  3. Angular核心-路由和导航

    Angular核心-路由和导航

  4. angular设置路由实现无刷新跳转

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. angular具名路由

    angular具名路由 具名路由时独立于主路由的路由,它不随主路由的切换而切换.适合在主路由页面中插入具名路由用于固定展示的部分. 在routes中配置具名路由,outlet后接路由出口的名称. ty ...

  6. angular子路由使用_使用CanActivate / CanActivateChild Guard保护Angular v2 +路由

    angular子路由使用 Protecting routes is something that has to happen in any app with authentication. There ...

  7. linux u盘插入事件,Linux 下监控USB设备拔插事件

    Linux 下监控USB设备拔插事件 发布时间:2018-01-29 00:00, 浏览次数:1111 , 标签: Linux USB * 使用Netlink来实现 这是一个特殊的socket,可以接 ...

  8. angular的路由

    1.添加<base>元素:告诉路由器如何合成导航用的URL <base hred="/"> // app文件夹是应用的跟目录 2.angular的路由是一个 ...

  9. Angular中路由的嵌套-父子路由

    场景 Angular介绍.安装Angular Cli.创建Angular项目入门教程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

最新文章

  1. bazel、tensorflow_serving、opencv编译问题
  2. 【C#】MD5 小程序编写
  3. Redis的高级特性哨兵
  4. php怎么加一个透明的菜单栏,window_PHP制作下拉透明菜单,下拉透明菜单 script language= - phpStudy...
  5. geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践
  6. 拓端tecdat|R语言隐马尔可夫模型HMM识别不断变化的市场条件
  7. webpack-obfuscator运行报错
  8. 机房收费系统---概要设计说明书
  9. 罗永浩以为×××短信给了马化腾一记暴击,实际……
  10. PySpark+Prophet
  11. 成为一名优秀高级项目经理的学习过程(今年学习方向)
  12. 《英语语法新思维初级教程》学习笔记(九)进行时态
  13. 全国信息技术标准化技术委员会汉字内码扩展规范(GBK)
  14. python描述对象静态特性的数据为_短期借款利息数额不大,可以直接支付,不预提,在实际支付时直接记入的账户是( )。...
  15. 制备a-CN_x、CrN、TiCN、TiAlN碳氮化物薄膜-供应锡硫化物薄膜 硫化亚锡(SnS)薄膜 电沉积硫化亚锡(SnS)薄膜 硫化亚锡(SnS)异质结薄膜 简易硫化亚锡(SnS)微米棒薄膜
  16. layui解决数据表格右侧有空白现象
  17. 【你又有一个好消息】荣获2022年国民技术MCURT-Thread设计大赛获奖榜单头名
  18. 系统如何自动识别短信验证码
  19. javascript 常用的dom操作及源生事件
  20. Linux运维18:网络和监控

热门文章

  1. Node.js实现基于TCP与UDP的数据通信
  2. bzoj1146CTSC2008Network
  3. 给你的shell终端添上一道靓丽的风景
  4. 显示隐藏JTree节点
  5. [转载]MVP(SC),MVP(PV),PM,MVVM 和 MVC 表现模式架构对比
  6. mesageflow 集成spider 开发思路 手稿
  7. Cannot convert type ‘ASP.login_aspx’ to ‘System.Web.UI.WebControls.Login’的解决方法
  8. 关于使用WindowsUpdate 或 Windows 自动升级时碰到的 svchost.exe 进程 CPU 资源占用过高的问题的相关信息...
  9. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档
  10. JQuery UI之Autocomplete(2)后端获取数据