Validation 带参数的Angular 2自定义验证器

Validation 带参数的Angular 2自定义验证器,validation,parameters,angular,Validation,Parameters,Angular,我如何在Angular 2中创建自己的maxLength验证器? 我能找到的所有示例都使用类似于“必需”的验证器,这意味着它们已经知道规则。它们只接受一个参数-控件本身。如何传递更多参数 这是我的示例验证器。如何将其修改为将数字5作为参数传递 export class MyValidators { static minValue(control:Control): {[s: string]: boolean} { var num = +control.value;

我如何在Angular 2中创建自己的maxLength验证器? 我能找到的所有示例都使用类似于“必需”的验证器,这意味着它们已经知道规则。它们只接受一个参数-控件本身。如何传递更多参数

这是我的示例验证器。如何将其修改为将数字5作为参数传递

export class MyValidators {
    static minValue(control:Control): {[s: string]: boolean} {
        var num = +control.value;
        if (isNaN(num) || num < 5 ) { return {"minValue": true}; }
        return null;
    }
}
导出类MyValidator{
静态最小值(控件:控件):{[s:string]:布尔值}{
var num=+control.value;
if(isNaN(num)| num<5){return{“minValue”:true};}
返回null;
}
}

这是一个示例。它是一个最小值验证器,您可以在其中传入一个数字进行验证

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;
  };
};
从'angular2/common'导入{Control};
导出常量minValueValidator=(最小值:编号)=>{
返回(控制:控制)=>{
var num=+control.value;
如果(isNaN(num)| num

更多详细信息可在官方文档页面中找到。

minValueValidator示例基本上表明,您可以将工厂用于自定义验证器,因此它类似于以下内容:

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

这里的另一个解决方案使用了更多的角度细微差别:

  static minValue(min: number): ValidatorFn {
    return (control: AbstractControl): ValidationErrors | null => {
      if (control.value == null || control.value == '') {
        //avoid validation if empty, we are not testing for required here
        return null;
      }
      const errors: ValidationErrors = {};
      let num = +control.value;
      if (isNaN(num) || num < min) {
        errors.isLessThanMin = {
          message: `Number must be greater that ${min}`
        };
      }
      return Object.keys(errors).length ? errors : null;
    };
  }
静态最小值(min:number):验证器fn{
返回(控件:AbstractControl):ValidationErrors | null=>{
if(control.value==null | | control.value==“”){
//如果为空,请避免验证,此处不测试所需的
返回null;
}
常量错误:ValidationErrors={};
让num=+control.value;
如果(isNaN(num)| num
现在您有了一条可重用得多的html错误消息

<div *ngIf="control.errors.isLessThanMin>{{control.errors.isLessThanMin.message}}</div>

minValueValidator=(min:number)=>{}
会更好吗?!这很有效。非常感谢。我还添加了isNaN检查,并将“export const”替换为“static”,使其成为类的成员。更新为包含NAN检查如何将变量值传递给此验证器?我注意到它总是希望字符串常量为,不允许我这样做。AOT编译器不支持此操作,因为不支持lambda:
<div *ngIf="control.errors.isLessThanMin>{{control.errors.isLessThanMin.message}}</div>