2016-02-18 5 views
9

ngModelの変更をどのように聞くことができますか? 問題:私はモデルにアクセスするときに、私は要素に(リンク)(変更)または(クリック)イベント、与えられた関数では、まだ変更されていません。私が変更されたモデルよりも500msのsetTimeoutを追加した場合。任意のアイデアどのように私は非常に悪い方法ですsetTimeoutせずに実際に変更されたオブジェクトを得ることができますか? HTMLで コード:コンポーネントで角2はモデルチェンジ時にリッスンします

<input type="checkbox" (click)="autoJoinToggle()" [(ngModel)]='active.bookmark.autoJoin'> Autojoin 

コード:

console.log(this.active.bookmark.autoJoin) // returns the current value (before the change) 
setTimeout(() => {console.log(this.active.bookmark.autoJoin);}, 500); //returns the value after the change 

私はモデルバインドさと「アクティブ」オブジェクトが最初の場所に存在しない必要があるので、私は角度のコントロールでこれを行うことはできません"active"が定義された後にコントロールの値を更新したい場合、 "アクティブ"オブジェクト(時間外に変化する)の変更をリッスンする必要があります。同じ問題はローカル変数と@ViewChildである - > "アクティブな"変更がいつ知る必要があるので、ローカル変数も更新する必要があります。ここで

も同様にGIFです: enter image description here

答えて

7
(ngModelChange)="doSomething($event)" 

または

autoJoinToggle(cb){ this.active.bookmark.autoJoin = cb; //do something.. } 

<input #cb type="checkbox" (click)="autoJoinToggle(cb.checked)" 
    [(ngModel)]='active.bookmark.autoJoin'> 

私はあなたが説明行動はいえ、バグとプル要求すでに提供が、https://github.com/angular/angular/issues/6311を追加していないと思います。

+1

は、ローカル変数+ ngModelを有するこのソリューションは動作しますが、doSomethingの機能で、私は明示的に設定 'this.active.autoJoin = cb.checked'私が発行されるまでの一時的な解決のために大丈夫だと思いますこれは' –

+0

あなたは を追加することができます固定でありますautoJoinToggle(cb){ this.active.bookmark.autoJoin = cb; // do something .. } ' だから、誰かが見るための完全な解決策になるでしょう –

関連する問題