Saltar al contenido

(cambio) vs (ngModelChange) en angular

Solución:

(change) evento vinculado al evento de cambio de entrada clásico.

https://developer.mozilla.org/en-US/docs/Web/Events/change

Puede usar (cambiar) el evento incluso si no tiene un modelo en su entrada como

<input (change)="somethingChanged()">

(ngModelChange) es el @Output de la directiva ngModel. Se dispara cuando cambia el modelo. 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:

<input (ngModelChange)="modelChanged($event)">
modelChanged(newObj) {
    // do something with new value
}

Básicamente, parece que no hay una gran diferencia entre dos, pero ngModel eventos gana el poder cuando usas [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
}

suponga que intenta lo mismo sin “ngModel cosas”

<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
}

En Angular 7, el (ngModelChange)="eventHandler()" disparará antes de el valor ligado a [(ngModel)]="value" se cambia mientras el (change)="eventHandler()" disparará después el valor ligado a [(ngModel)]="value" está cambiado.

Como encontré y escribí en otro tema, esto se aplica a angular <7 (no estoy seguro de cómo es en 7+)

Solo para el futuro

tenemos que observar que [(ngModel)]="hero.name" es solo un atajo al que se le puede quitar el azúcar para: [ngModel]="hero.name" (ngModelChange)="hero.name = $event".

Entonces, si eliminamos el azúcar del código, 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 los que deben ejecutarse en algún orden.

Resumiendo: Si colocas ngModelChange antes de ngModel, obtienes el $event como el nuevo valor, pero su objeto de modelo aún tiene el valor anterior.
Si lo colocas después ngModel, el modelo ya tendrá el nuevo valor.

FUENTE

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *