调试入口:this.routingService.getNextPageContext()
这个 page context 间接从 store 里读取的,靠调试 selector 是拿不到的。
咱们以前学习过,当 Angular router 框架胜利将浏览器地址栏的 url,匹配到开发人员用 RouterModule.forChild 传入的 routes 数组时,会抛出 RoutesRecognized 事件,如下图所示:
if (event instanceof RoutesRecognized) {
routesRecognized = event;
if (!dispatchNavLate && this.trigger !== RouterTrigger.STORE) {this.dispatchRouterNavigation(event);
}
Angular router 框架这里提供了一个 hook,能够容许利用开发人员批改下一个 router state,即 nextRouterState 变量:
@Injectable()
export class CustomSerializer
implements fromNgrxRouter.RouterStateSerializer<ActivatedRouterStateSnapshot>
咱们本人实现了 Angular router 框架的一个接口:
fromNgrxRouter.RouterStateSerializer
这里硬编码了,只有 routerState 里的参数,呈现了 productCode,咱们就认为这是一个 Product page:
if (params['productCode']) {context = { id: params['productCode'], type: PageType.PRODUCT_PAGE };
}
而后咱们的 reducer 被调用:
这些都是之前 serializer populate 出的数据:
这里咱们把 navigation target 写入 in-memory state, 这样接下来的 selector,就能从 state 里读取出 product 明细页面的 page context 了:
疑难至此解开。
更多 Jerry 的原创文章,尽在:” 汪子熙 ”: