Angular9 canActivateChild запускается до завершения canActivate
У меня есть файл модуля маршрутизации с этими маршрутами:
const routes: Routes = [
{
path: '',
component: MainComponent,
canActivate: [LoadDataGuard, ConfigureJsGuard],
canActivateChild: [EnterChildGuard],
canDeactivate: [CleanupJsGuard],
data: {
modelService: ModelService,
} ,
children: [
{
component: ChildComponent,
.......
В LoadDataGuard я пишу функцию canActivate, которая вызывает функцию enterTab (enterTab управляет данными childComponent, это мой код:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.modelService.loadData()
.pipe(
tap(data => {
this.enterTab(modelService);
}),
map(data => true),
catchError(err => this.handleError(err))
}
это функция enterTab
private async enterTab(modelService: TabRepository) {
if (modelService.enterTab) {
return await modelService.enterTab();
}
return;
}
в modelService:
enterTab() {
return this.modelApiService.getModelMetaData()
.pipe(tap((result: any): Observable<any> => {
this.modelMetaData = result.data;-> this data received after canActivateChild starts.!!!
}
)).toPromise();
}
в canActivateChild я использую modelService.modelMetaData, но он не определен, потому что дочерний компонент загружается до canActivate родительской отделки.
как я могу решить эту проблему?