2016-06-10 87 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])] 
});