目前,我有这个:
new Loader().load().then(() => {
platformBrowserDynamic().bootstrapModule(AppModule);
});
问题是我不一定需要延迟一切,直到承诺结算,只有ngOnInit
和任何路线解决。我想允许任何其他角色2设置ISN&#T; T路由或渲染,但阻止那些直到承诺解决。有没有更有效的方法来做到这一点?
答案 0 :(得分:1)
使用APP_INITIALIZER
第一个选项是使用APP_INITIALIZER
。有了这个,你可以在AppComponent
被引导之前做初始的事情:
@NgModule({
// ...
providers: [
{
provide: APP_INITIALIZER,
useFactory: appInitFactory,
deps: [AppInitService],
multi: true
}
]
})
export class AppModule {}
使用deps
数组,您可以在工厂内注入可能需要的服务:
export function appInitFactory(appInitService: AppInitService): () => Promise<any> {
return () => appInitService.initializeApplication();
}
您必须使用此功能返回(箭头)功能。
使用路由器配置
如果您使用Router
,则第二个选项是在initialNavigation
上的forRoot
来电中将false
设置为RouterModule
:
@NgModule({
imports: [
RouterModule.forRoot(AppRoutes, {initialNavigation: false})
]
})
export class AppModule {}
然后在你的AppComponent
内你应该有一些为你做Promise
逻辑的服务,并在完成之后导航你要去的地方。问题&#39;使用此解决方案的是AppComponent
确实已初始化,但如果您只关心实际路由未立即解决,但在等待解析时确实有类型的app-shell,则可以使用此< / p>