内部根组件是首次初始化singltone服务。
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加载了子组件。
如何等待子组件的服务?
答案 0 :(得分:1)
如果您需要在应用初始化之前等待即用型服务或异步预取一些数据,那么最好的选择是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
方法执行,并且只有在应用解析后才对其进行引导。