(изменение) vs (ngModelChange) в угловой
Angular 1 не принимает событие onchange, а только принимает ng-change событие.
угловой 2, с другой стороны, принимает оба (change) и (ngModelChange) события, которые оба, кажется, делают то же самое.
какая разница?
является ли один из них более эффективным?
ngModelChange:
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs изменить:
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
1 ответ:
(change)событие, связанное с классическим событием изменения ввода.https://developer.mozilla.org/en-US/docs/Web/Events/change
вы можете использовать (изменить) событие, даже если у вас нет модели на входе как
<input (change)="somethingChanged()">
(ngModelChange)- это@Outputдирективы ngModel. Он срабатывает при изменении модели. Вы не можете использовать это событие без ngModel директивы.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
как вы узнаете больше в исходном коде,
(ngModelChange)выдает новое значение.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
таким образом, это означает, что у вас есть возможность такого использования:
<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 }
Comments