2016-10-27 13 views
1

私は角度2を初めて使用しています。私は最近、双方向結合を試みています。部品のモデルの角度2の遅延更新

template.html

<select [(ngModel)]="val" (change)="onChanged()"> 
    <option>1</option> 
    <option>2</option> 
    <option>1</option> 
</select> 

component.ts問題は、ドロップダウンの変更に選択された値が、値に出力される

..//other code definitions here 
export class MyComponent{ 
    val: number = 1; //edited this 

    onChanged(){ 
    console.log(this.val); 
    } 
} 

:私は、次のコードを持っていますコンソールは以前の値のままです。もう一度別の値を選択すると更新されますが、印刷された値は以前に選択された値です。それは1つの選択によって遅れたようです。

誰でもお手伝いします。

ありがとうございました。

答えて

2

valの値は、次のAngular2変更検出サイクルでのみ更新されます。

<select [(ngModel)]="val" (change)="onChanged($event)"> 

MyComponentで:onChanged方法で最新の値を使用するには、このような$event値を消費しますが、結合双方向使用する場合

onChanged(newVal){ 
    console.log(newVal); 
} 
+0

2ウェイバインディングの目的を破っていませんか?モデルにビューがバインドされているパラメータを使用して関数を乱雑にする必要があります。 – Jed

+0

IMOそれはありません。 2方向データバインディングはまだ予約されています(親コンポーネントの値が最終的に更新されるため)。あなたがここで必要とするものはもう一つの懸念です:その特定の出来事に対していくつかの行動をとる方法。 2つの異なる懸念を1にクラッタさせることは、頭痛を起こす最も簡単な方法です。 –

+0

よろしいですか。ありがとうございました。 – Jed

2

は - [(ngModel)]を、常に(ngModelChange)の代わり(change)を使用する:

<select [(ngModel)]="val" (ngModelChange)="onChanged()"> 
    <option>1</option> 
    <option>2</option> 
    <option>1</option> 
</select> 

ここはworking Plunkerです。

+0

はい、問題は、ngModelChangeを使用するとonChanged()関数が2回呼び出されることです。 – Jed

+0

私は自分の投稿を編集しました。私はval宣言で何かを見逃しました。 – Jed

+0

@Jedそれでも、すべての変更で一度呼び出されます。私が再び提供したPlunkerをチェックしてください。 –

関連する問題