Evento de cambio de Angular 2 en cada pulsación de tecla

Resuelto daniel asked hace 8 años • 13 respuestas

El evento de cambio solo se llama después de que el foco de la entrada haya cambiado. ¿Cómo puedo hacer para que el evento se active con cada pulsación de tecla?

<input type="text" [(ngModel)]="mymodel" (change)="valuechange($event)" />
{{mymodel}}

El segundo enlace cambia con cada pulsación de tecla, por cierto.

daniel avatar Feb 12 '16 16:02 daniel
Aceptado

Solo usé la entrada del evento y funcionó bien de la siguiente manera:

en el archivo .html:

<input type="text" class="form-control" (input)="onSearchChange($event.target.value)">

en el archivo .ts:

onSearchChange(searchValue: string): void {  
  console.log(searchValue);
}
Ramy Feteha avatar May 04 '2017 07:05 Ramy Feteha

Úselo ngModelChangedividiendo la [(x)]sintaxis en dos partes, es decir, enlace de datos de propiedad y enlace de eventos:

<input type="text" [ngModel]="mymodel" (ngModelChange)="valuechange($event)" />
{{mymodel}}
valuechange(newValue) {
  mymodel = newValue;
  console.log(newValue)
}

También funciona para la tecla de retroceso.

Mark Rajcok avatar Feb 12 '2016 16:02 Mark Rajcok

El evento (keyup) es su mejor opción.

Veamos por qué:

  1. (cambiar) como mencionaste, se activa solo cuando la entrada pierde el foco, por lo tanto, es de uso limitado.
  2. (pulsación de tecla) se activa al presionar una tecla, pero no se activa con ciertas pulsaciones de teclas como el retroceso.
  3. (keydown) se activa cada vez que se presiona una tecla. Por lo tanto, siempre se retrasa 1 carácter; ya que obtiene el estado del elemento antes de que se registrara la pulsación de tecla.
  4. (keyup) es su mejor opción, ya que se activa cada vez que se completa un evento de pulsación de tecla, por lo que esto también incluye el carácter más reciente.

Entonces (keyup) es el más seguro porque...

  • registra un evento en cada pulsación de tecla a diferencia del evento (cambio)
  • incluye las teclas que (pulsación de tecla) ignora
  • no tiene retraso a diferencia del evento (keydown)
Sagar avatar Sep 25 '2017 10:09 Sagar