“可选字段” Angular 2反应形式的自定义验证器

时间:2018-07-25 14:17:57

标签: javascript angular angular-reactive-forms custom-validators

我为“可选”字段编写了一个自定义验证器,逻辑和验证与相应的值配合良好。但是,一旦单击文本字段并且它不提供值,它将显示为必填字段。 如果有人知道,请帮帮我。

这是我的自定义验证器类。在这里,我的文本字段值将类似于'123s,wd345,23'和range(2,12)

custom-validator.ts

import { AbstractControl, ValidatorFn } from '@angular/forms';

export class OrderUnitValidators {

  static range(min: number, max: number): ValidatorFn {
      return (c: AbstractControl): { [key: string]: boolean } | null => {
          if(c && (c.value !==null || c.value !== undefined)){
            const str=c.value;
            const valArr=str.split(',');
            for(let val in valArr){
                if(valArr[val].length<2 || valArr[val].length>12){
                return { 
                    'range' : true
                     };
                }
          
            }
        }
        
        return null;
      };
  }
}

1 个答案:

答案 0 :(得分:0)

正如Florian所说,您犯了一个小错误,我已经测试了您的代码,它对我来说是完美的。但是请确保在FormGroup中应该初始化空字符串。

export class OrderUnitValidators {

  static range(min: number, max: number): ValidatorFn {
      return (c: AbstractControl): { [key: string]: boolean } | null => {
          if(c && (c.value !== '')){
            const str=c.value;
            const valArr=str.split(',');
            for(let val in valArr){
                
                if(valArr[val].length<2 || valArr[val].length>12){
                return { 
                    'range' : true
                     };
                }
          
            }
        }
        
        return null;
      };
  }
}