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?

Ignat
la source

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

Pankaj Parkar
la source
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
 }
}
Aniket kale
la source
@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 "

Chaudhary
la source
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;
}
Sathish Visar
la source
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
la source
0

Essayez d'utiliser (focusout) au lieu de (flou)

Kevin Black
la source