2016-06-10 13 views
2

Ich bin neu in eckigen und ich würde gerne wissen, wenn es möglich ist, die Validierung flexibler durch die Übergabe von Parametern zu ihnen. Z.B. eine Dezimalvalidierung, wo Sie 2 (3 oder 4 in anderen Fällen) Dezimalstellen haben können.Flexible Kontrolle Validierung

Ich habe dieses ng-Buch 2 und es gibt dieses Beispiel:

function skuValidator(control: Control): { [s: string]: boolean } { 
    if (!control.value.match(/^123/)) { 
     return {invalidSku: true}; 
    } 
} 

-

this.myForm = fb.group({ 
    'sku': ['', Validators.compose([ 
    Validators.required, skuValidator])] 
}); 

Wie Sie der einzige Parameter ich sehen kann, ist der Steuerparameter. Es wäre schön, wenn ich die Validierung im selben Validator wechseln könnte. Für ein Steuerelement sind nur ganze Zahlen erlaubt und für die anderen sind auch die Nachkommastellen erlaubt. Ist das möglich?

Antwort

3

Funktion, die eine Validator-Funktion gibt

nur eine Funktion erstellen, die die Parameter nimmt und gibt die Prüffunktion

function skuValidator(param) { 
    function validate(control: Control): { [s: string]: boolean } { 
    // use `param` value in validator 
    if (!control.value.match(/^123/)) { 
     return {invalidSku: true}; 
    } 
    } 
    return validate; 
} 

den Validator wie erhalten:

this.myForm = fb.group({ 
    'sku': ['', Validators.compose([ 
    Validators.required, skuValidator(someValueFromComponent)])] 
}); 

Klasse Das gibt eine Validatorfunktion zurück

Alternativ können Sie auch Klasse erstellen

class SkuValidator { 
    constructor(private:param) {} 

    validate(control: Control): { [s: string]: boolean } { 
    // use `param` value in validator 
    if (!control.value.match(/^123/)) { 
     return {invalidSku: true}; 
    } 
    } 
} 

den Validator wie erhalten:

this.myForm = fb.group({ 
    'sku': ['', Validators.compose([ 
    Validators.required, new SkuValidator(someValueFromComponent).validate])] 
});