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 родительской отделки.

как я могу решить эту проблему?

0 ответов

Другие вопросы по тегам