私は次のコンポーネントをAngular2に持っています。配列を入力として受け取り、配列の各エントリに対して、各エントリの緯度と経度を取得するサービスを呼び出します。 (約束を返す)サービスngIfはテンプレートを更新しません
export class MyComponent implements OnInit {
@Input() players: Player[] = [];
locations: LatAndLon[] = [];
isBusy: boolean = true;
constructor(
private myService: MyService,
) {}
ngOnInit(): void {
for (let player of this.players) {
this.myService.getLatAndLon(player.address).then(latAndLon => {
this.locations.push(latAndLon);
this.finishLoading();
});
}
}
finishLoading(): void {
this.isBusy = this.players.length != this.locations.length;
}
...
}
ので、ngOnInit方法で、私は私のサービスからのすべてのデータを取得しよう。テンプレートに表示したいのですが、すべてのサービスコールを「解決」するまで待たなければなりません。
このため、すべてのデータが利用可能かどうかをチェックする変数isBusy
を作成しました。私はisBusy
をサービスに呼び出すたびに更新しようとします(もしそうなら、私に知らせてください)。
<div *ngIf="!isBusy">
....
しかしが、何も示されていない、私は場所の配列の値を印刷する場合、私は、すべてが右であることを何らかの手がかりを見ることができるという事実にもかかわらず:
はその後、私は次のテンプレートを持っていますか?
要求のいずれかが失敗した場合は、何も表示されません。多分それが起こるでしょうか? 'isBusy'を出力した場合、これは期待どおりに設定されていますか? –
こんにちは、私はそれをチェックし、すべての要求は良好で、最後にisBusyはfalseに設定されています。 – Manuelarte
問題を再現する完全な最小限の例をplunkrに投稿してください。約束事がうまく解決されているという保証はないので、コードはおそらくあなたがしたいことをしません。 Promise.all()を使用するか、LatLonをプレーヤー自体でストロークする必要があります。 –