2016-04-20 10 views
12

Wie erstelle ich meinen eigenen maxLength Validator in Angular 2? Alle Beispiele, die ich finden konnte, verwenden Validatoren, die "erforderlich" sind, was bedeutet, dass sie die Regeln bereits kennen. Sie akzeptieren nur einen Parameter - die Kontrolle selbst. Wie gebe ich mehr Parameter weiter?Angular 2 Custom Validator mit Parametern

Hier ist der Beispiel-Validator, den ich habe. Wie ändere ich es, um Nummer 5 als Parameter zu übergeben?

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

Vielen Dank.

Antwort

17

Hier ist ein Beispiel ist. Es ist ein Min-Wert-Validator, bei dem Sie eine Zahl zur Validierung übergeben.

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

Weitere Details finden Sie in der offiziellen Dokumentation Custom Validators Seite.

+0

'minValueValidator = (min: number) => {}' wäre besser ?! –

+0

@A_Singh Guter Punkt. Aktualisiert – TGH

+0

Das funktioniert. Vielen Dank! Ich habe auch IsNaN Check hinzugefügt und 'Export const' durch 'static' ersetzt, um es zu einem Mitglied einer Klasse zu machen. – rook

-1

Das lustige daran ist, dass Sie einfach Angular2 Quellcode überprüfen:

MaxLengthValidator

Validators

+1

Exploring Angular Quellcode einschließlich der Interna wie ValidatorFn ist nicht genau das, was ich suche. Hier ist der Beispiel-Validator, den ich habe. Wie ändere ich es, um Nummer 5 als Parameter zu übergeben? 'Exportklasse MyValidators { static minValue (Kontrolle: Kontrolle): {[s: string]: boolean} { var num = + control.value; if (isNaN (num) || num <5) { Rückgabe {"minValue": true}; } Rückgabewert null; } } ' – rook

+1

Wow, das hilft überhaupt nicht. – Belmiris

2

Das minValueValidator Beispiel zeigt im Grunde, dass Sie eine Fabrik für die benutzerdefinierte Validator verwenden können, so dass es so etwas wie dies sein wird:

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

In meinem Fall verwende ich Formcontrol nicht Steuerung

import { FormControl } from '@angular/forms'; 
Verwandte Themen