状態をプロパティにバインドするための[(ngModel)]と[ngModel]の違いは?


89

テンプレートの例を次に示します。

<input type="number" class="form-control" [(ngModel)]="overRideRate" formControlName="OverRideRate">

<input type="number" class="form-control" [ngModel]="overRideRate" formControlName="OverRideRate">

ここでは、両方とも同じことをします。どちらが好ましいのか、そしてその理由は?


7
[ngModel]-これはプロパティバインディングのみであり、双方向バインディングではありません。したがって、新しい値を入力しても更新されませんoverRideRate
VadimB 2017

2
[(ngModel)]は、Angular 2に由来する双方向バインディングです。[ngModel]は、表示用です。
David Doan 2017

2
非推奨のアラート:Angular 6では、(angular.io/api/forms/FormControlName#use-with-ngmodel)は次のように述べています:リアクティブフォームディレクティブでのngModel入力プロパティとngModelChangeイベントの使用のサポートはAngular v6で非推奨になり、 Angularv7で削除されました。こちらもご覧ください:(stackoverflow.com/questions/50371079/…
sboggs11 2018

1
sboggs10あなたが提供したリンクは、ngModelをリアクティブフォームと組み合わせることに言及しています。これは、ほとんどの場合、質問とは関係ありません。
Cesar Leonardo Ochoa Contreras

ここでは程度の良い説明です[(ngModel)]双方向のデータは角にバインド
cateyes

回答:


147

[(ngModel)]="overRideRate" の短縮形です [ngModel]="overRideRate" (ngModelChange)="overRideRate = $event"

  • [ngModel]="overRideRate"にバインドoverRideRateすることですinput.value
  • (ngModelChange)="overRideRate = $event"イベントが発行されたときのoverRideRate値で更新することです。input.valuechange

これらが一緒になって、Angular2が双方向バインディングを提供します。


58

[ngModel]="currentHero.name" は一方向バインディングの構文ですが、

[(ngModel)]="currentHero.name" は双方向バインディング用であり、構文は次のものから複合されます。

[ngModel]="currentHero.name" そして (ngModelChange)="currentHero.name = $event"

モデルを渡すだけでよい場合は、最初のモデルを使用してください。モデルが変更イベントをリッスンする必要がある場合(入力フィールド値が変更された場合など)、2番目のイベントを使用します。



11

Angular2 +データフロー:

Angularでは、データは次の方法でモデル(コンポーネントクラスts.file)とビュー(コンポーネントのhtml)の間を流れることができます。

  1. モデルからビューへ。
  2. ビューからモデルへ。
  3. データは両方向に流れます。これは、双方向データバインディングとも呼ばれます

構文:

表示するモデル:

<input type="text" [ngModel]="overRideRate">

この構文は、プロパティバインディングとも呼ばれます。これoverRideRateで、入力フィールドのプロパティが変更されると、ビューが自動的に更新されます。ただし、ユーザーが番号を入力したときにビューが更新された場合、overRideRate プロパティは更新されません。

モデルの表示:

(input)="change($event)"            // calling a method called change from the component class
(input)="overRideRate=$event.target.value" // on input save the new value in the title property

ここで発生するのは、イベントがトリガーされることです(この場合、入力イベントですが、任意のイベントである可能性があります)。次に、コンポーネントクラスのメソッドを呼び出すか、プロパティをクラスプロパティに直接保存できます。

双方向データバインディング:

<input [(ngModel)]="overRideRate" type="text" >

次の構文は、双方向のデータバインディングに使用されます。これは基本的に両方の構文糖衣です。

  1. モデルを表示にバインドします。
  2. ビューをモデルにバインドする

これで、クラス内で何かが変更され、これはビュー(モデルからビュー)を反映し、ユーザーが入力を変更するたびにモデルが更新されます(ビューからモデル)。


5

[ngModel]コードを評価し、出力を生成します(双方向バインディングなし)
[(ngModel)]コードを評価して出力を生成し、双方向バインディングも有効にします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.