web-dev-qa-db-fra.com

Angular 2 validateur personnalisé avec paramètres

Comment puis-je créer disons mon propre validateur maxLength dans Angular 2? Tous les exemples que j'ai pu trouver utilisent des validateurs similaires à "requis", ce qui signifie qu'ils connaissent déjà les règles. Ils n'acceptent qu'un seul paramètre - le contrôle lui-même. Comment passer plus de paramètres?

Voici l'exemple de validateur que j'ai. Comment le modifier pour passer le numéro 5 en paramètre?

export class MyValidators {
    static minValue(control:Control): {[s: string]: boolean} {
        var num = +control.value;
        if (isNaN(num) || num < 5 ) { return {"minValue": true}; }
        return null;
    }
}

Merci.

21
rook

Voici un exemple. C'est un validateur de valeur min où vous passez un nombre à valider.

import {Control} from 'angular2/common';

export const minValueValidator = (min:number) => {
  return (control:Control) => {
    var num = +control.value;
    if(isNaN(num) || num < min){
      return {
         minValue: {valid: false}
      };
    }
    return null;
  };
};

Plus de détails peuvent être trouvés dans la page de documentation officielle Validateurs personnalisés .

29
TGH

L'exemple minValueValidator montre essentiellement que vous pouvez utiliser une usine pour votre validateur personnalisé, ce sera donc quelque chose comme ceci:

static minValue = (num: Number) => {
    return (control:Control) => {
         var num = control.value;
         if (isNaN(num) || num < 5 ) { return {"minValue": true}; }
         return null;
    }
}

Dans mon cas, j'utilise FormControl pas Control

import { FormControl } from '@angular/forms';
2
Nuke Goldstein