这个方法位于类CmsPageGuardService内。
当我们请求一个实际并不存在的page时,
因为1这个path对应的route configuration里的protected字段为undefined,所以不算是protected route,因此canActivate返回true.
进入this.routingService.getNextPageContext方法。
该方法从ngrx store里用SELECT取出Observable:
此时取出的page context已经不是homepage,而是1了:
试图取这个pageLabelOrId为1的page,当然取不到数据:
因此进入this.service.canActivateNotFoundPage:
而我在浏览器地址栏里输入1之后,page context何时改变的呢?
答案是在ngrx-router.store.js里,调用537行我们自己实现的serializer, 将包含了electronics-spa/en/USD/1的RouterStateSnapshot,序列化成一个新的nextRouterState:
新的page context 对象在此处生成:
然后通过serializer返回给调用者,dispatch给ngrx store:
538行执行完毕之后,再进入我们的router.reducer.ts: