延迟Angular应用程序启动,直到promise结束?

时间:2017-09-07 12:16:28

标签: angular

目前,我有这个:

new Loader().load().then(() => {
    platformBrowserDynamic().bootstrapModule(AppModule);
  });

问题是我不一定需要延迟一切,直到承诺结算,只有ngOnInit和任何路线解决。我想允许任何其他角色2设置ISN&#T; T路由或渲染,但阻止那些直到承诺解决。有没有更有效的方法来做到这一点?

1 个答案:

答案 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>