[(ngModel)]和[ngModel]绑定状态与属性之间的区别?


85

这是一个模板示例:

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

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

他们俩在这里做同样的事情。首选哪一个,为什么?


7
[ngModel]-仅是属性绑定,不是双向绑定。因此,输入新值将不会更新overRideRate
VadimB

2
[(ngModel)]是来自Angular 2的两种方式的绑定。[ngModel]仅用于显示。
David Doan

2
弃用警报:在Angular 6中,(angular.io/api/forms/FormControlName#use-with-ngmodel)指出:Angular v6中已弃用将ngModel输入属性和ngModelChange事件与反应形式指令一起使用的支持,并将在在Angular v7中已删除。另请参见:(stackoverflow.com/questions/50371079/…
sboggs11 '18

1
sboggs10您提供的链接是指将ngModel与反应形式结合起来,在大多数情况下,这与问题无关。
塞萨尔·莱昂纳多·奥乔亚·孔特雷拉斯

这里是一个很好的解释有关[(ngModel)]双向数据的角度绑定
cateyes

Answers:


136

[(ngModel)]="overRideRate" 是...的缩写 [ngModel]="overRideRate" (ngModelChange)="overRideRate = $event"

  • [ngModel]="overRideRate"是要绑定overRideRateinput.value
  • (ngModelChange)="overRideRate = $event"是更新overRideRate具有值input.valuechange被发射的事件。

它们共同为Angular2提供了双向绑定。


56

[ngModel]="currentHero.name" 是单向绑定的语法,而

[(ngModel)]="currentHero.name" 用于双向绑定,语法来自:

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

如果只需要传递模型,请使用第一个模型。如果您的模型需要侦听更改事件(例如,当输入字段值更改时),请使用第二个事件。



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

这里发生的是触发了一个事件(在这种情况下为输入事件,但可以是任何事件)。然后,我们可以调用组件类的方法或将属性直接保存在类属性中。

2路数据绑定:

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

以下语法用于2路数据绑定。基本上,这两种语法都是:

  1. 绑定模型以进行查看。
  2. 将视图绑定到模型

现在,在类中发生了一些变化,这将反映我们的视图(从模型到视图),并且每当用户更改输入时,模型就会被更新(从模型到视图)。


5

[ngModel]评估代码并生成输出(无双向绑定)
[(ngModel)]评估代码并生成输出,还启用双向绑定

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.