Загрузка данных до вызова AppComponent.ngOnInit - PullRequest
0 голосов
/ 05 февраля 2020

В моем проекте Angular 8 у меня есть UserService, который запрашивает текущий User с сервера, используя HttpClient, и асинхронно присваивает ответ его полю publi c user. Я вставляю UserService в AppComponent и в ngOnInit копирую this.userService.user в свое собственное поле user, которое связано с содержимым span, определенным в его файле шаблона HTML. Чтобы принудительно Angular fini sh загрузить User до вызова ngOnInit, я реализовал интерфейс Resolve<User> в UserService и установил его в качестве преобразователя маршрута root ("") .

Моя проблема в том, что при запуске приложения AppComponent.ngOnInit вызывается до , маршрутизатор активируется и распознаватель загружает User с сервера, поэтому AppComponent не может отобразить загруженный User в его HTML. Можно ли загрузить данные до загрузки загрузочного компонента (AppComponent), то есть до вызова его метода ngOnInit?

1 Ответ

1 голос
/ 05 февраля 2020

Вы можете сделать это с APP_INITIALIZER, функцией, которая будет выполнена до инициализации приложения

https://angular.io/api/core/APP_INITIALIZER

В вашем app.module.ts

export function initializeConfig(initService: InitService) {
  const x = (): Promise<any> => {
    return initService.Init();
  };
  return x;
}

@NgModule({
  ...
  providers: [
    InitService,
    {
      provide: APP_INITIALIZER,
      useFactory: initializeConfig,
      deps: [InitService],
      multi: true
    },
  ],
  ...
})

init.service.ts

@Injectable()
export class InitService {

  constructor(private service: YourService) {
  }

  Init() {
    return new Promise<void>((resolve, reject) => {
      this.service.loadDataBeforeBootstrap.then( () => {
        resolve();
      }).catch( error => {
        reject(error);
      });
    });
  }
}
...