📢 Je vous présente le livre Angular

  • 1) Il offre un contenu clair et concis, tout en couvrant une multitude de concepts d'Angular.
  • 2) Le livre est structurĂ© en trois niveaux : dĂ©butant, intermĂ©diaire et avancĂ©
  • 3) traite des pratiques les plus rĂ©centes d'Angular, comme les signaux, les vues diffĂ©rĂ©es, la gestion des flux, entre autres
  • 4) De plus, vous y trouverez plusieurs liens vers des exemples de code source pour approfondir vos connaissances en pratique.

Skip to content

Comment ajouter des validateurs synchrones ? ​

Voici comment vous pouvez utiliser la propriété validators pour ajouter des validateurs aux contrôles FormControl dans l'exemple de code LoginFormComponent :

ts
import { Component } from '@angular/core';
import { FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-login-form',
  template: `
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
      <label>
        Email:
        <input type="email" [formControl]="emailControl">
      </label>
      <br>
      <label>
        Mot de passe:
        <input type="password" [formControl]="passwordControl">
      </label>
      <br>
      <button type="submit">Se connecter</button>
    </form>
  `
})
export class LoginFormComponent {
  emailControl = new FormControl('', [Validators.required, Validators.email]);
  passwordControl = new FormControl('', [Validators.required, Validators.minLength(6)]);
  form: FormGroup = = this.formBuilder.group({
      email: this.emailControl,
      password: this.passwordControl
  })

  constructor(private formBuilder: FormBuilder) {}

  onSubmit() {
    // La soumission du formulaire est gérée ici
  }
}

Dans cet exemple, nous avons ajouté les validateurs Validators.required et Validators.email au contrôle FormControl emailControl, et les validateurs Validators.required et Validators.minLength(6) au contrôle FormControl passwordControl. Ces validateurs exigent respectivement que le champ de courriel soit obligatoire et ait un format de courriel valide, et que le champ de mot de passe soit obligatoire et ait au moins 6 caractères.

Validateur selon un autre champ (exemple: confirmation de mot de passe) ​

Vous pouvez également ajouter des validateurs de groupe en utilisant la méthode FormGroup de FormBuilder. Par exemple, pour ajouter une validation de groupe qui vérifie que les champs "password" et "confirmPassword" sont identiques :

ts
this.form = this.fb.group({
  password: ['', Validators.required],
  confirmPassword: ['', Validators.required]
}, { validator: this.checkPasswords });

checkPasswords(group: FormGroup) {
  let pass = group.controls.password.value;
  let confirmPass = group.controls.confirmPassword.value;

  return pass === confirmPass ? null : { notSame: true }
}

Comment utiliser ces erreurs de validation dans votre template HTML ? ​

Voici comment vous pouvez utiliser les erreurs de validation dans votre template HTML avec Angular :

html
<form>
  <label>
    Champ:
    <input type="text" [formControl]="control">
  </label>
  <!-- Affichage des erreurs de validation -->
  <div *ngIf="control.invalid && (control.dirty || control.touched)">
    <div *ngIf="control.hasError('required')">
      Le champ est obligatoire.
    </div>
    <div *ngIf="control.hasError('minlength')">
      Le champ doit avoir au moins 6 caractères.
    </div>
  </div>
</form>

Dans cet exemple, nous avons utilisé la directive *ngIf pour afficher un message d'erreur si le contrôle est considéré comme invalide et si le champ de formulaire a été modifié ou a reçu le focus (control.dirty || control.touched). Nous avons également utilisé la méthode hasErrors du contrôle pour vérifier les erreurs spécifiques qui ont provoqué l'invalidation du contrôle, et avons affiché des messages d'erreur correspondants.

Afficher les informations d'une erreur ​

Pour afficher les informations de l'erreur minlength dans votre template HTML, vous pouvez accéder à la propriété requiredLength de l'objet errors du contrôle de formulaire. Voici comment cela pourrait être mis en œuvre dans votre template HTML :

html
<form>
  <label>
    Champ:
    <input type="text" [formControl]="control">
  </label>
  <!-- Affichage des erreurs de validation -->
  <div *ngIf="control.invalid && (control.dirty || control.touched)">
    <div *ngIf="control.errors.required">
      Le champ est obligatoire.
    </div>
    <div *ngIf="control.errors.minlength">
      Le champ doit avoir au moins {{ control.errors.minlength.requiredLength }} caractères (en cours : {{ control.errors.minlength.actualLength }}).
    </div>
  </div>
</form>

Dans cet exemple, nous avons utilisé la propriété requiredLength de l'objet errors pour afficher le nombre de caractères minimum requis par le validateur minlength, ainsi que la longueur actuelle de la valeur du champ de formulaire (control.errors.minlength.actualLength).

Validateurs existants ​

Voici une liste des validateurs de formulaire couramment utilisés dans Angular, avec une brève explication de chacun :

ValidateurDescription
Validators.requiredExige que le champ de formulaire soit renseigné (ne soit pas vide).
Validators.minLength(n)Exige que le champ de formulaire ait au moins n caractères.
Validators.maxLength(n)Exige que le champ de formulaire ait au plus n caractères.
Validators.emailExige que le champ de formulaire ait un format de courriel valide.
Validators.pattern(regex)Exige que le champ de formulaire respecte un motif spécifique défini par la expression régulière regex.
Validators.nullValidatorNe valide aucune valeur. Utilisé pour désactiver la validation d'un contrôle de formulaire.
Validators.compose([])Prend en entrée un tableau de validateurs et renvoie un nouveau validateur qui exécute chaque validateur dans le tableau et renvoie une erreur si l'un d'eux échoue.
Validators.min(n)Exige que la valeur du champ de formulaire soit supérieure ou égale à n.
Validators.max(n)Exige que la valeur du champ de formulaire soit inférieure ou égale à n.

Utiliser setValidators() et updateValueAndValidity() ​

Voici un exemple qui utilise la méthode setValidators() et updateValueAndValidity() pour ajouter des validateurs à un contrôle de formulaire dans Angular :

ts
import { Component } from '@angular/core';
import { FormControl, Validators } from '@angular/forms';

@Component({
  selector: 'app-form',
  template: `
    <form>
      <label>
        Champ:
        <input type="text" [formControl]="control">
      </label>
    </form>
  `
})
export class FormComponent {
  control = new FormControl('');

  constructor() {
    // Ajout d'un validateur de longueur minimale de 6 caractères au contrôle
    this.control.setValidators(Validators.minLength(6));
    // Mise à jour de la valeur et de la validité du contrôle
    this.control.updateValueAndValidity();
  }
}

Dans cet exemple, nous avons créé un contrôle FormControl avec la valeur initiale '' (une chaîne vide) et avons ajouté le validateur Validators.minLength(6) en appelant la méthode setValidators(). Nous avons ensuite mis à jour la valeur et la validité du contrôle en appelant la méthode updateValueAndValidity().

Le contrôle ne sera considéré comme valide que si la valeur du champ de formulaire a au moins 6 caractères. Si la valeur est inférieure à 6 caractères, le contrôle sera considéré comme invalide et affichera une erreur de validation.

Chaque mois, recevez en avant-première notre newsletter avec les dernières actualités, tutoriels, astuces et ressources Angular directement par email !