私はアンギュラ2を使い慣れていません。非同期http要求と補間によるバインディングに問題があります。角2 - 非同期http要求による補間とバインド
は、ここに私のコンポーネントです:
テンプレートは、「モデル」はまだ設定されていないので、私はエラーを取得し、レンダリングされ@Component({
selector: 'info',
template: `<h1>{{model.Name}}</h1>`
})
export class InfoComponent implements OnInit {
model: any;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.model == null) {
this._service.observableModel$.subscribe(m => this.model = m);
this._service.get();
}
}
}
。
私はこの非常に醜いハックでの問題解決:
@Component({
selector: 'info',
template: `
<template ngFor #model="$implicit" [ngForOf]="models | async">
<h1>{{model.Name}}</h1>
</template>
`
})
export class NeadInfoComponent implements OnInit {
models: Observable<any>;
constructor(
private _service: BackendService
) { }
ngOnInit() {
if (this.models == null) {
this._service.observableModel$.subscribe(m => this.models = Observable.of([m]));
this._service.get();
}
}
}
を私の質問は:結合することなく、私のHTTP呼び出しが完了するまで、テンプレートのレンダリングを延期するか、どのようにテンプレートで直接「モデル」の値を補間する方法別のコンポーネントに?
ありがとうございます!
ありがとうございました!エルヴィスはトリックをやった!しかし、私はまだレンダリングの流れを理解していません。テンプレートは、コンポーネントのプロパティに変更があるたびにレンダリングされますか? –
@TonyAlexanderHildは、角の変化の検出(イベントごとに実行されます)では、デフォルトですべてのビュー/テンプレートのバインディングがダーティチェックされます。つまり、変更が確認されます。サーバーからデータが返されると、それがイベントなので、変更検出が実行されます。 'model.Name'はダーティーチェックされ、変更されていることがわかります。そのため、AngularはDOMを更新します。 Angularがブラウザーに制御を戻した後、DOMの変更が表示され、画面に表示されている内容が更新されます。 –
ありがとう@MarkRajcok!今は明らかです。 –