如何等待服务就绪Angular?
How to await service ready Angular?
内部根组件初始化第一次单音服务。
export class AppComponent {
constructor(private reonMapLibraryService: ReonMapLibraryService) {
}
}
然后在子组件中我尝试准备好实例:
export class SearchFilterComponent implements OnInit, AfterViewInit {
constructor(private reonMapLibraryService: ReonMapLibraryService) {}
ngAfterViewInit(): void {
this.layers = this.reonMapLibraryService.layersManager.getRegistryTree();
}
}
它说 reonMapLibraryService
是 undefined
,因为首先 ar 加载了子组件。
如何等待子组件的服务?
如果您需要在应用程序初始化之前等待准备好使用的服务或异步预取一些数据,那么最好的地方是 APP_INITIALIZER。应用程序应该在初始化程序执行期间等待,并且只有在初始化程序被解析后才会启动。你可以像这样使用它(让我们把我们的初始化程序放在 AppModule 中):
export function init_app(reonMapLibraryService: ReonMapLibraryService) {
return async () => await reonMapLibraryService.fetchData();
}
@NgModule({
declarations: [...],
imports: [...],
providers: [
...,
ReonMapLibraryService,
{
provide: APP_INITIALIZER,
useFactory: init_app,
deps: [ReonMapLibraryService],
multi: true
}
]
})
就是这样。它应该等待 fetchData
方法执行和 bootstrap 应用程序只有在它得到解决后。
内部根组件初始化第一次单音服务。
export class AppComponent {
constructor(private reonMapLibraryService: ReonMapLibraryService) {
}
}
然后在子组件中我尝试准备好实例:
export class SearchFilterComponent implements OnInit, AfterViewInit {
constructor(private reonMapLibraryService: ReonMapLibraryService) {}
ngAfterViewInit(): void {
this.layers = this.reonMapLibraryService.layersManager.getRegistryTree();
}
}
它说 reonMapLibraryService
是 undefined
,因为首先 ar 加载了子组件。
如何等待子组件的服务?
如果您需要在应用程序初始化之前等待准备好使用的服务或异步预取一些数据,那么最好的地方是 APP_INITIALIZER。应用程序应该在初始化程序执行期间等待,并且只有在初始化程序被解析后才会启动。你可以像这样使用它(让我们把我们的初始化程序放在 AppModule 中):
export function init_app(reonMapLibraryService: ReonMapLibraryService) {
return async () => await reonMapLibraryService.fetchData();
}
@NgModule({
declarations: [...],
imports: [...],
providers: [
...,
ReonMapLibraryService,
{
provide: APP_INITIALIZER,
useFactory: init_app,
deps: [ReonMapLibraryService],
multi: true
}
]
})
就是这样。它应该等待 fetchData
方法执行和 bootstrap 应用程序只有在它得到解决后。