Angular 1 не принимает событие onchange, но принимает только событие ng-change
.
Angular 2, с другой стороны, принимает оба события (change)
и (ngModelChange)
, которые, похоже, выполняют одно и то же.
Какая разница?
какой из них лучше для производительности?
ngModelChange:
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
против изменения:
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
(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
}
В Angular 7 (ngModelChange)="eventHandler()"
сработает до изменения значения, связанного с [(ngModel)]="value"
а (change)="eventHandler()"
сработает после значения, связанного с [(ngModel)]="value"
изменено.
(change)
и(keyup)