変更検出とテンプレートの更新をAngularで理解しようとしています。私は実際に少し混乱しています。Angleの変更検出と非同期関数の理解
私はボタンと簡単な入力フィールドを持っています。 ボタンをクリックすると、入力フィールドの値を「テスト」に変更します。その後すぐに戻る非同期関数を作ります。それから、forループ(テスト目的)を使って約4秒待つ。私は何を期待
- は次のとおりです。入力フィールドの値は、それが非同期呼び出しであるため、すぐに「asynched」になります。
- リアリティ:入力フィールドの値は4秒後に "asynched"になります。
コード
updateField(){
this.textContentMain.title = "test"
this.asyncTestFunction();
for(var i=0;i<3999999999;i++){
}
}
asyncTestFunction() {
this._contentSalesTextConfigService.get(this.contentSalesTextConfig).subscribe(item => {
this.textContentMain.title = "asynced";
})
}
テンプレートここ
<button (click)="updateField()">Update</button>
<input [ngModel]="textContentMain.title" #titleAccessor="ngModel" name="title" id="title" type="text" >
私はここで間違っている可能性が、あなたのサイクルをダイジェスト:あなたはシーンの背後にある重要なことを説明することができ イベントループ
見るこの最高のビデオを読まなければならない。このため
関数が実行されるまではおそらく実行されません。あなたの同期関数はあなたのforループとは別のものです。あなたのforループがそこにあるのかどうかわかりません。私の考えでは、forループはあなたが待っているものです。 –
非同期呼び出しは、現在のコンテキスト内のすべてが完了した後にのみ*常に*解決されます。 getが「to-doリスト」に追加され、残りの関数が実行されてから、そのリストが次にチェックされる前に実行されます。これは、タイトル値が実際に設定されたときに期待どおりに動作するAngularの変更検出とは関係ありません。 – jonrsharpe
ありがとう@jonrsharpe – rematnarab