Запрос POST не закончился а страницу уже загрузило Angular 2
Проблема такая, при открытие модуля у меня сразу выполнятся запрос для информации в select и получается там пусто, но возможно как-то сделать пока запрос не закончился что бы он модуль не отрисовал ?
ngOnInit(): void {
this.gameAccounts();
this.totalPrice = this.price;
console.log(this.gameAccountsArray);
console.log(this.gameAccountsArray[1].account);
}
gameAccounts() {
this.acpService.gameAccounts()
.subscribe((data: any) => {
this.gameAccountsArray = data.gameAccounts;
});
}
Ответы (2 шт):
Вариант с использованием async-пайпа. Предпочтительней, так как angular сам сделает все необходимые отписки для избежания утечек памяти. Также возможен вариант с тем, чтобы обернуть не весь компонент, а только ту часть, которая ожидает эти данные.
ngOnInit(): void {
this.gameAccountsArray$ = this.gameAccounts();
...
}
gameAccounts$() {
return this.acpService.gameAccounts().pipe(map((data) => data.gameAccounts));
}
<div *ngIf="gameAccountsArray$ | async">
...Остальной код компонента
</div>
Также возможно, что не нужно будет оборачивать весь компонент, а передать данные в компонент, который их использует.
<select
[someInput]="gameAccountsArray$ | async"
>
...
</select>
Также можно сделать костыльный вариант с использованием флага-инициализации. По сути такой же вариант, что и с this.gameAccountsArray$, только сделать специальное поле initialize
Можно использовать резолвер на уровне роута. Пока не отработают все резолверы, роут не загрузится.