(change)
lié à l'événement classique de changement d'entrée.
https://developer.mozilla.org/en-US/docs/Web/Events/change
Vous pouvez utiliser l'événement (de changement) même si vous n'avez pas de modèle à votre entrée comme
<input (change)="somethingChanged()">
(ngModelChange)
es el @Output
de la directive ngModel. Il se déclenche lorsque le modèle change. Vous ne pouvez pas utiliser cet événement sans la directive ngModel.
https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
Au fur et à mesure que vous découvrez le code source, (ngModelChange)
émet la nouvelle valeur.
https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Cela signifie donc que vous avez la capacité d'une telle utilisation :
<input (ngModelChange)="modelChanged($event)">
modelChanged(newObj) {
// do something with new value
}
En fait, il semble qu'il n'y ait pas de grande différence entre les deux, mais ngModel
gagne en puissance lorsque vous utilisez [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
}
supposez que vous essayez la même chose sans " ngModel
choses"
<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
}
1 votes
Si vous voulez comparer les deux, vous pouvez peut-être aussi ajouter
(change)
y(keyup)
2 votes
Je ne veux pas les comparer. Je veux juste savoir lequel est le plus performant ?
7 votes
Oui, il n'y a aucune comparaison. Si vous utilisez ngModel, vous pouvez utiliser le dernier, sinon le premier. Il est toujours préférable d'éviter le ngModel, car il s'agit d'une liaison de données à double sens, ce qui nuit aux performances.
2 votes
Modifié pour mettre l'accent sur "quelle est la différence" et "lequel est le plus performant" pour éliminer la subjectivité & voté pour rouvrir.
15 votes
Dans Angular 7, le (ngModelChange)="eventHandler()" se déclenchera AVANT que la valeur liée à [(ngModel)]="value" soit modifiée, tandis que le (change)="eventHandler()" se déclenchera APRÈS que la valeur liée à [(ngModel)]="value" soit modifiée.
5 votes
D'ailleurs, l'événement (change) n'est déclenché que lorsque le focus quitte l'entrée. Si vous voulez un événement déclenché après chaque pression sur une touche, vous pouvez utiliser l'événement (input).
0 votes
@CAK2 en fait, cela dépend de l'ordre du HTML : github.com/angular/angular/issues/28107