Comment utiliser l'événement onBlur sur Angular2?


112

Comment détecter un événement onBlur dans Angular2? Je veux l'utiliser avec

<input type="text">

Quelqu'un peut-il m'aider à comprendre comment l'utiliser?

Réponses:


211

Utiliser (eventName)pour lors de la liaison d'un événement à DOM, ()est essentiellement utilisé pour la liaison d'événements. Utilisez également ngModelpour obtenir une liaison bidirectionnelle pour la myModelvariable.

Balisage

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

Code

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

Démo

Alternative (pas préférable)

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

Démo


Pour que le formulaire piloté par modèle déclenche la validation blur, vous pouvez passer le updateOnparamètre.

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

Documents de conception


2
Pourquoi l'alternative n'est-elle pas préférable?
slashp

Angular ne veut pas que vous utilisiez l'événement $ à l'intérieur du HTML pour le renvoyer au JS. Toutes les opérations DOM doivent être effectuées par le biais de choses telles que les liaisons, ngModel et autres.
Barton Durbin

14

Vous pouvez également utiliser l' événement (focusout) :

Utiliser (eventName)pour lors de la liaison d'un événement à DOM, ()est essentiellement utilisé pour la liaison d'événements. Vous pouvez également utiliser ngModelpour obtenir une liaison bidirectionnelle pour votre model. Avec l'aide de ngModelvous pouvez manipuler la modelvaleur de variable dans votre fichier component.

Faites cela dans un fichier HTML

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

Et dans votre fichier (composant) .ts

export class AppComponent { 
 model: any;
 constructor(){ }
 someMethodWithFocusOutEvent(){
   console.log('Your method called');
   // Do something here
 }
}

@Aniketkale Si je mets une alerte dans votre méthode, someMethodWithFocusOutEventle programme entre dans une boucle car l'alerte fait perdre le focus au champ, y a-t-il un moyen de résoudre ce problème?
ps0604

6

vous pouvez utiliser directement l' événement (flou) dans la balise d'entrée.

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

et vous obtiendrez la sortie dans " résultat "


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

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()); }}


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.