Supposons que notre formulaire ait des champs de date startDate et endDate et nous voulons nous assurer que startDate doit être avant endDate.

Pour implémenter des validations contenant un ou plusieurs contrôles frères, nous devons définir la fonction de validation à un niveau supérieur à celui des contrôles frères.

form-example.component.ts
app / src / pages / form-example / form-example.component.ts
ngOnInit() : void
{
  this.formGroup = this.formBuilder.group(
  {
    startDate : new FormControl({
      value    : null,
      disabled : false
    }, [ Validators.required ]),
    endDate : new FormControl({
      value    : null,
      disabled : false
    }, [ Validators.required ]),
  },
  // NOTE Validateur de haut niveau
  { validator : DateValidator.dateRangeValidator });
}

Ensuite, nous définissons un validateur personnalisé dans un fichier séparé, par exemple date.validator.ts.

date.validator.ts
app / src / shared / validators / date.validator.ts
// Angular modules
import { Injectable }       from '@angular/core';
import { AbstractControl }  from '@angular/forms';
import { ValidationErrors } from '@angular/forms';

@Injectable({
  providedIn : 'root'
})
export class DateValidator
{
  constructor() {}

  public static dateRangeValidator(control : AbstractControl) : ValidationErrors | null
  {
    // NOTE Contrôle de sécurité
    if (!control.get('startDate').value || !control.get('endDate').value)
      return null;

    // NOTE Comparaison de champs
    // const mStart  = moment(control.get('startDate').value);
    // const mEnd    = moment(control.get('endDate').value);
    // const isValid = mStart.isBefore(mEnd);

    // NOTE Invalide
    if (!isValid)
      return { invalidDateRange : true };

    // NOTE Valide
    return null;
  }
}

Si invalide, retourne un objet d'erreur (n'importe quel nom arbitraire), comme, return { invalidEndDate: true }

Assurez-vous qu'il renvoie toujours un null pour les cas valides ou non pertinents, et un objet "non-null" dans les cas où une erreur doit être déclenchée sur le formGroup

Pour afficher l'erreur au niveau de notre vue, nous utilisons la clé invalidDateRange retournée par notre validateur.

form-example.component.ts
app / src / pages / form-example / form-example.component.html
<div *ngIf="formGroup.hasError('invalidDateRange')">
  La date de début n'est pas antérieure à la date de fin
</div>

JS libs #1 : Youtube

Cette semaine JS libs vous fait découvrir des plugins Youtube like pour votre site web

© Copyright 2015 - 2022 Studio Centurio