這個方法位于類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: