我有一个安装了 ngrx/router-store 的 ngrx/store 应用程序。在应用程序中,我具有三个功能 - 两个是“渴望”(auth
和router
),一个是懒惰(admin
)。admin
包含一个名为 的切片状态user
。
尽管急切,路由器选择器似乎不起作用。console.warn 消息,(否则非常清晰和有指导意义!)并不能真正解决问题,因为该功能在以下内容中明确声明/定义app.module.ts
:
app.module.ts
StoreModule.forRoot(
{
[AUTH_FEATURE_KEY]: AuthFeature.reducer,
router: routerReducer,
},
{
metaReducers: !environment.production ? [] : [],
runtimeChecks: {
strictActionImmutability: true,
strictStateImmutability: true,
},
}
),
路由器选择器.ts
export const getRouterState = createFeatureSelector<RouterReducerState<RouterStateUrl>>('router');
export const getCurrentRoute = createSelector(
getRouterState,
router => {
console.log('getCurrentRoute', router) // <-- undefined
return router.state;
}
);
export const getRouterStateParams = createSelector(
getCurrentRoute,
state => state.params
);
然后在我的一个延迟加载模块中,我getRouterStateParams
与实体结合:
用户选择器.ts
export const getUserFromRouteParam = createSelector(
selectEntities,
fromRouter.getRouterStateParams,
(entities, params) => {
console.log(entities, params)
return entities[params['id']]
}
)
这就是错误发生的地方。
我是在做一些根本错误的事情,还是某种竞争条件?
更新
到目前为止我尝试了什么:
StoreModule.forFeature()
分别为每个急切的减速器设置,和StoreModule.forRoot({})
- 设置
initialNavigation: 'enabled'
- 这只会导致路由切片立即出现(通常,reducer 仅在第一个导航事件之后才启动),但它不会纠正undefined
来自选择器的 s - 不使用
CustomSerializer
,而是基于默认的序列化程序和工厂交付getSelectors()
- 我感兴趣的所有选择器,用于 url、params 和 queryParams -undefined
也返回 - 不同的设置
navigationActionTiming
- 这个类似的问题中提到的每个可能的技巧,包括显式
initialState
对象