一尘不染

(change) vs (ngModelChange)的角度

javascript

Angular 1不接受onchange()事件,它仅接受ng-change()事件。

另一方面,Angular 2接受(change)(ngModelChange)事件,两者似乎都在做相同的事情。

有什么不同?

哪个最适合表现?

ngModelChange:

<input type="text" pInputText class="ui-widget ui-text"
    (ngModelChange)="clearFilter()" placeholder="Find"/>

vs change:

<input type="text" pInputText class="ui-widget ui-text" 
    (change)="clearFilter()" placeholder="Find"/>

阅读 615

收藏
2020-05-01

共1个答案

一尘不染

(change) 事件绑定到经典输入更改事件。

即使您没有输入模型,也可以使用(更改)事件,如下所示:

<input (change)="somethingChanged()">

(ngModelChange)@OutputngModel指令的。模型更改时将触发。如果没有ngModel指令,则无法使用此事件。

当您在源代码中发现更多内容时,将(ngModelChange)发出新值。

因此,这意味着您具有这种用法的能力:

<input (ngModelChange)="modelChanged($event)">



modelChanged(newObj) {
    // do something with new value
}

基本上,两者似乎没有太大的区别,但是ngModel使用时事件会获得力量[ngValue]

  <select [(ngModel)]="data" (ngModelChange)="dataChanged($event)" name="data">
      <option *ngFor="let currentData of allData" [ngValue]="currentData">
          {{data.name}}
      </option>
  </select>



dataChanged(newObj) {
    // here comes the object as parameter
}

假设您尝试了没有“ ngModel事物” 的相同事物

<select (change)="changed($event)">
    <option *ngFor="let currentData of allData" [value]="currentData.id">
        {{data.name}}
    </option>
</select>



changed(e){
    // event comes as parameter, you'll have to find selectedData manually
    // by using e.target.data
}
2020-05-01