(change)
event bound to classical input change event.
You can use (change) event even if you don’t have a model at your input as
<input (change)="somethingChanged()">
(ngModelChange)
is the @Output
of ngModel directive. It fires when the model changes. You cannot use this event without ngModel directive.
As you discover more in the source code, (ngModelChange)
emits the new value.
So it means you have ability of such usage:
<input (ngModelChange)="modelChanged($event)">
modelChanged(newObj) { // do something with new value }
Basically, it seems like there is no big difference between two, but ngModel
events gains the power when you use [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 }
assume you try the same thing without “ngModel
things”
<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 }