2017-03-14 9 views
1

入力値をプロパティにバインドするには、ngModelディレクティブを使用します。たとえば、次のようにngModelではなくvalueプロパティに直接バインドします

<input type='text' [(ngModel)]='model' /> 

なぜ我々は単に入力要素のvalueプロパティにバインディングを使用することはできませんか? <input>valueChangeイベントを排出しないので、あなたが

<input type='text' [value]='model' (input)="model=$event" /> 

[(value)]='model'を行うことができます

<input type='text' [(value)]='model' /> 

答えて

3

は動作しません。

ngModelは、直接値バインディングではフォーム統合を提供しません。

https://angular.io/docs/ts/latest/guide/template-syntax.html#!#two-way

ngModelは、入力要素のすべての種類のために設けられた指令であるControlValueAccessor Sを設け使用し参照ngModelと任意成分との間のアダプタとして機能する(また、カスタム独自のコンポーネントのための1つであることができます)。これは、すべての種類のコンポーネントと入力要素とのバインドを統一するためです。 [value]が一方向binidng

であるのに対し、

は、https://github.com/angular/angular/blob/2.4.8/modules/%40angular/forms/src/directives/checkbox_value_accessor.ts#L17-L50

+0

これを無効にして特定のイベントに返信する方法はありませんか? – Hans

+0

私は自分の答えを更新しました。 –

1
することができます

が、唯一、それは双方向のデータバインディングであるため、我々は[(ngModel)]使用この

<input type='text' [value]='model' /> 

よう[value]を使用しても参照してください。私たちは[]と一緒に()を使用します。これは、双方向バインディングを意味します。

とは別に、単純に(input)がありません。イベントのmouseovermouseoutなどのようにangular2に

1

があるあなたがそれを行うことができますが...

  • 角度は、物事の多くを行う/管理できる使って、その作り付けのディレクティブのアプローチのために有名です。
  • ngModelディレクティブは、あなたがあなたの必要性に応じて結合one-wayまたはtwo-wayを使用することができます。
  • 角度は、一般的に使用すると、フォームコントロールのいずれかがvalidかではありませんので、form有効か否かを確認することができ、それを通してngModelディレクティブで使用されているフォーム管理システムを内蔵しています。
  • ngModelディレクティブは、あなたが時間をかけてデータのストリームを放出することができますObservableObserverパターンで構築されています。要するに

ngModelディレクティブで指定したメリットがたくさんあるので、通常の人がngModelvalue以上の構文を使用することを好みます。

関連する問題