¿Cómo usar el evento onBlur en Angular2?

112

¿Cómo detecta un evento onBlur en Angular2? Quiero usarlo con

<input type="text">

¿Alguien puede ayudarme a entender cómo usarlo?

Ignat
fuente

Respuestas:

211

Úselo (eventName)para vincular eventos a DOM, básicamente ()se usa para vincular eventos. También se usa ngModelpara obtener un enlace bidireccional para la myModelvariable.

Margen

<input type="text" [(ngModel)]="myModel" (blur)="onBlurMethod()">

Código

export class AppComponent { 
  myModel: any;
  constructor(){
    this.myModel = '123';
  }
  onBlurMethod(){
   alert(this.myModel) 
  }
}

Manifestación

Alternativa (no preferible)

<input type="text" #input (blur)="onBlurMethod($event.target.value)">

Manifestación


Para que el formulario controlado por modelo active la validación blur, puede pasar el updateOnparámetro.

ctrl = new FormControl('', {
   updateOn: 'blur', //default will be change
   validators: [Validators.required]
}); 

Documentos de diseño

Pankaj Parkar
fuente
2
¿Por qué no es preferible la alternativa?
slashp
Angular no quiere que use el evento $ dentro del HTML para enviar de vuelta al JS. Todas las operaciones DOM deben realizarse a través de cosas como enlaces, ngModel y otras cosas.
Barton Durbin
14

También puede usar el evento (focusout) :

Úselo (eventName)para vincular eventos a DOM, básicamente ()se usa para vincular eventos. También puede utilizar ngModelpara obtener enlaces bidireccionales para su model. Con la ayuda de ngModelusted puede manipular el modelvalor de la variable dentro de su component.

Haz esto en un archivo HTML

<input type="text" [(ngModel)]="model" (focusout)="someMethodWithFocusOutEvent($event)">

Y en su archivo (componente) .ts

export class AppComponent { 
 model: any;
 constructor(){ }
 someMethodWithFocusOutEvent(){
   console.log('Your method called');
   // Do something here
 }
}
Col rizada
fuente
@Aniketkale Si pongo una alerta en su método, someMethodWithFocusOutEventel programa entra en un bucle cuando la alerta hace que el campo pierda su enfoque, ¿hay alguna manera de solucionarlo?
ps0604
6

puede utilizar directamente el evento (desenfoque) en la etiqueta de entrada.

<div>
   <input [value] = "" (blur) = "result = $event.target.value" placeholder="Type Something">
   {{result}}
</div>

y obtendrá una salida en " resultado "

Chaudhary
fuente
3

HTML

<input name="email" placeholder="Email"  (blur)="$event.target.value=removeSpaces($event.target.value)" value="">

TS

removeSpaces(string) {
 let splitStr = string.split(' ').join('');
  return splitStr;
}
Visar Sathish
fuente
1
/*for reich text editor */
  public options: Object = {
    charCounterCount: true,
    height: 300,
    inlineMode: false,
    toolbarFixed: false,
    fontFamilySelection: true,
    fontSizeSelection: true,
    paragraphFormatSelection: true,

    events: {
      'froalaEditor.blur': (e, editor) => { this.handleContentChange(editor.html.get()); }}
Er Mariam Akhtar
fuente
0

Intenta usar (focusout) en lugar de (desenfoque)

Kevin negro
fuente