我以开发模式启动SAP Spartacus,浏览器里输入url: localhost:4200, 会自动重定向到如下页面:
http://localhost:4201/powertools-spa/en/USD/
这个action是我们自己自定义的serializer里生成的。
在router.reducer.ts里打印出action明细:
fromNgrxRouter.ROUTER_NAVIGATION
发现powertools-spa/en/USD对应的semanticRoute是home, 而context字段指向的PageContext,id为__HOMEPAGE__, type为ContentPage:
其中RouterState类型定义如下:
当前状态,即初始状态,page context为空。初始状态也定义在router.reducer.ts里:
运行时的初始状态:
homepage维护在action payload里。下图已经是从初始状态进入加载context id为__HOMEPAGE__的下一状态了:
问题:这个包含了home page的action是谁主动发起的呢?
答案是这个CustomSerializer:
semantic route:home,路径为"":
lookupSemanticRoute:
routing-config.service.ts:
谜底揭开了