#angular #ngoninit
#angular #ngoninit
Вопрос:
У меня есть некоторые службы аутентификации и другие службы запуска, вызываемые в ngoninit для app.component.ts, чтобы экран оставался черным перед переходом на домашнюю страницу. Я создал службу загрузки, которая будет отображать страницу загрузки, пока она активна, однако я все еще вижу черный экран.
В нынешнем виде я всегда вижу false для showLoader в компоненте loader
app.component.ts
ngOnInit(){
this.loaderService.showLoader;
//startupservice calls and auth calls
this.loaderService.hideLoader;
}
loader.service
loaderSubject = new Subject<any>();
constructor(){
}
showLoader(){
this.loaderSubject.next(true);
}
hideLoader(){
this.loaderSubject.next(false);
}
loader.component
showLoader = false;
constructor(private loaderService : LoaderService) { }
ngOnInit(): void {
this.loaderService.loaderSubject.subscribe((value) => this.showLoader = value);
}
Комментарии:
1. На первый взгляд кажется странным, когда я смотрю на ваш код, showLoader должен иметь значение true, когда init и его состояние изменяются на false после того, как служба уже выполнила свою работу. Затем при первом посещении отобразится загрузчик и подождите немного, чтобы скрыть загрузчик.
2. В app.component.ts убедитесь, что вы вызываете функцию с помощью this.loaderService.showLoader() . В настоящее время это просто ссылка. Тема должна быть преобразована в observable перед подпиской. Несколько других вещей, но, надеюсь, это должно направить вас в правильном направлении
Ответ №1:
Это происходит потому, что Angular запускается ngOnInit()
на родительском компоненте (компоненте приложения) сначала до создания дочернего компонента (компонента загрузчика). При создании компонента loader loaderSubject
для него уже установлено значение false
.
Ваш компонент loader отображается при ngAfterViewInit()
вызове в компоненте приложения. Проверьте этот пример.