如何序列化angular2组件的初始化?

时间:2016-10-20 07:51:35

标签: angular angular2-services

目前,在引导应用程序组件时,angular2并不等待所有生命周期阶段的完成。

以下方法开始结束序列将打印到控制台:

  

AppComponent.ngOnInit() - START

     

SearchComponent.ngOnInit() - START

     

AppComponent.ngOnInit() - END

如何等待完成app组件的所有生命周期阶段,以便序列如下所示:

  

AppComponent.ngOnInit() - START

     

AppComponent.ngOnInit() - END

     

SearchComponent.ngOnInit() - START

1 个答案:

答案 0 :(得分:1)

您无法控制生命周期回调。

您可以使用

我问题的选择方法是使用APP_INITIALIZER。不能使用使用路由器的服务(例如Angulartics2),因为此时路由器尚未初始化。 下面是使用async-await的示例代码。

@NgModule({
imports: [
    HttpModule,
    routing,
    SharedModule.forRoot()
],
providers: [
    {provide: APP_BASE_HREF, useValue: '/'},
    {provide: APP_INITIALIZER,
        useFactory: (appModule:AppModule) => async () => {
            await appModule.init();
        }, deps: [AppModule], multi:true}
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {

    constructor(private service:Service) {
    }

    // tslint:disable-next-line:typedef
    async init() {
        await this.service.init();
    }
}