灵活的控制验证

时间:2016-06-10 07:58:32

标签: typescript angular

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

我有这本ng-book 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])]
});

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

1 个答案:

答案 0 :(得分: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])]
});