Angular 1 no acepta onchange()
eventos, solo acepta ng-change()
eventos.
Angular 2, por otro lado, acepta ambos (change)
y (ngModelChange)
eventos, que parecen estar haciendo lo mismo.
¿Cual es la diferencia?
¿Cuál es el mejor para el rendimiento?
ngModelChange :
<input type="text" pInputText class="ui-widget ui-text"
(ngModelChange)="clearFilter()" placeholder="Find"/>
vs cambio :
<input type="text" pInputText class="ui-widget ui-text"
(change)="clearFilter()" placeholder="Find"/>
javascript
html
angular
typescript
angular-ngmodelchange
Ramesh Rajendran
fuente
fuente
Respuestas:
(change)
evento vinculado al evento de cambio de entrada clásico.https://developer.mozilla.org/en-US/docs/Web/Events/change
Puede usar el evento (cambio) incluso si no tiene un modelo en su entrada como
(ngModelChange)
es la@Output
directiva ngModel. Se dispara cuando el modelo cambia. No puede usar este evento sin la directiva ngModel.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L124
A medida que descubra más en el código fuente,
(ngModelChange)
emite el nuevo valor.https://github.com/angular/angular/blob/master/packages/forms/src/directives/ng_model.ts#L169
Entonces significa que tiene la capacidad de tal uso:
Básicamente, parece que no hay una gran diferencia entre dos, pero los
ngModel
eventos ganan poder cuando los usas[ngValue]
.suponga que intenta lo mismo sin "
ngModel
cosas"fuente
<input (ngModelChange)="modelChanged($event)">
No es correcto,[ngModel]
es obligatorio.(change)
, en este caso, puedes hacer un(onClick)="yourFunction(youParameter)"
En Angular 7,
(ngModelChange)="eventHandler()"
se disparará antes de que[(ngModel)]="value"
se cambie el valor vinculado, mientras que(change)="eventHandler()"
se disparará después de que[(ngModel)]="value"
se cambie el valor vinculado .fuente
ngModelChange
activan las actualizaciones del modelo de vista.(ngModelChange)
evento se dispara antes de que se cambie el valor y(change)
después de que haya cambiado. Gracias por la información, super útil!Como he encontrado y escrito en otro tema, esto se aplica a angular <7 (no estoy seguro de cómo es en 7+)
Solo para el futuro
hay que observar que
[(ngModel)]="hero.name"
es sólo un atajo que puede ser azucarado-de a:[ngModel]="hero.name" (ngModelChange)="hero.name = $event"
.Entonces, si eliminamos el código de azúcar, terminaríamos con:
<select (ngModelChange)="onModelChange()" [ngModel]="hero.name" (ngModelChange)="hero.name = $event">
o
<[ngModel]="hero.name" (ngModelChange)="hero.name = $event" select (ngModelChange)="onModelChange()">
Si inspecciona el código anterior, notará que terminamos con 2
ngModelChange
eventos y esos deben ejecutarse en algún orden.En resumen: si coloca
ngModelChange
antesngModel
, obtiene el$event
como el nuevo valor, pero su objeto modelo todavía tiene el valor anterior. Si lo coloca despuésngModel
, el modelo ya tendrá el nuevo valor.FUENTE
fuente
1:
(change)
está vinculado al evento de cambio de HTML. La documentación sobre HTML onchange dice lo siguiente:Fuente: https://www.w3schools.com/jsref/event_onchange.asp
2 - Como se indicó anteriormente,
(ngModelChange)
está vinculado a la variable de modelo vinculada a su entrada.Entonces, mi interpretación es:
(change)
se dispara cuando el usuario cambia la entrada(ngModelChange)
se dispara cuando el modelo cambia, ya sea consecutivo a una acción del usuario o nofuente