2016-06-10 65 views
2

我是新来的角,我想知道是否有可能通过传递参数使验证更灵活。例如。一个十进制验证,你可以有2(3或4在其他情况下)小数位。灵活的控制验证

我有这样的NG-2册且有这个例子:

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

正如你可以看到我得到的唯一参数是控制参数。如果我可以在同一个验证器中切换验证,那将会很好。对于一个控件,只允许使用整数,对于其他控件的小数位也是允许的。这可能吗?

回答

3

函数返回一个验证器函数

只需创建一个函数,它的参数和返回验证功能

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

得到这样的验证:

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

类返回验证函数

另外,您还可以创建类

class SkuValidator { 
    constructor(private:param) {} 

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

得到这样的验证:

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