我在使用APP_INITIALIZER时遇到问题。一切似乎都很好,函数到达端点并返回并执行解析(true(。问题是,毕竟我只能看到空白的屏幕。控制台中有0个错误。这是代码:
export function initApplication(store: Store<fromRoot.State>){//() => Observable<any> {
return (): Promise<any> => {
return new Promise(resolve => {
store.dispatch(AppActions.StartAppInitializer());
store.dispatch(AppActions.LoadUserSettings());
store.select(fromRoot.getUserSettingsLoaded)
.pipe(
tap(userSettingsLoaded => console.log(userSettingsLoaded)),
filter(userSettingsLoaded => userSettingsLoaded == true),
take(1)
)
.subscribe((userSettingsLoaded) => {
store.dispatch(AppActions.FinishAppInitializer());
resolve(true);
})})}
}
这里的代码在app.module.ts中的@NgModule中的提供者部分
{
provide: APP_INITIALIZER,
useFactory: initApplication,
multi: true,
deps: [Store]
}
有什么建议吗?
从注释中看,这似乎是未正确评估的筛选条件。我想知道你的选择是否是它不起作用的原因,你能试着移除选择周围的管道((吗?
更改此项:
store.pipe(select(fromRoot.getUserSettingsLoaded))
到此:
select(fromRoot.getUserSettingsLoaded)
问题是警卫在APP_INITIALIZER的同时开火。他们并没有等待app_init完成,他们需要app_init的操作结果。这就是佩奇并没有出现的原因——警卫挡住了他们。对我来说,解决方案是添加app.routing.module.ts
initialNavigation: 'disabled'
然后在app.component.ts 的构造函数中启用它
router.initialNavigation();