Есть ли способ подождать, прежде чем служба инициализирует загрузку других компонентов? Мне нужно загрузить некоторые данные синхронно, прежде чем отображать компоненты (которые требуют данных), и я не хочу использовать обещания/наблюдаемые данные (используя их для асинхронных вызовов)Angular2: Ожидание инициализации службы
ngIf, похоже, не режет (компоненты, даже если они не совпадают).
Я не использую маршрутизатор (не нужно его для приложения), поэтому я не думаю, что @CanActivate подходит в этом случае.
Любые идеи?
@Component({
selector: 'my-app',
directives: [MyDirective],
template: `
<div>
<div *ngIf="!initialized">Loading...</div>
<div *ngIf="initialized"><myDirective>should wait for service to be initialized</myDirective></div>
</div>`
})
export class AppComponent {
initialized = false;
constructor(_myService: MyService) {
this._myService = _myService;
}
ngOnInit() {
this._myService.init()
.then(() => {
setTimeout(() => this.initialized = true, 2000);
}
);
}
}
Я согласен, NgIf должен работать. Просто FYI, «инвентарь» не требуется. Рекомендуется (ваш редактор TypeScript будет улавливать с ним синтаксические ошибки), но это не требуется. –
Это не обязательно полезно. Есть случай, над которым я сейчас работаю (что привело меня сюда), где я хочу загрузить некоторые данные по HTTP до того, как мой сервис будет готов. У меня есть значение по умолчанию в firebase, и если моя служба не получает идентификатор, ему нужно скопировать значение по умолчанию в новый объект w/id. Проблема в том, что если я просто сразу вложу все это, значение по умолчанию из firebase не обязательно будет загружено. – Seiyria
@Seiyria, чем это другой вопрос, вы ищете своего рода ленивое завершение модели. Наверное, не связано с исходным вопросом. – Zlatko