Angular 2 custom validator with parameters

 ̄綄美尐妖づ 提交于 2019-12-18 18:38:35

问题


How do I create let's say my own maxLength validator in Angular 2? All examples I could find use validators similar to 'required' one meaning that they already know the rules. They only accept one param - the control itself. How do I pass more parameters?

Here's the sample validator I have. How do I modify it to pass number 5 as a parameter?

export class MyValidators {
    static minValue(control:Control): {[s: string]: boolean} {
        var num = +control.value;
        if (isNaN(num) || num < 5 ) { return {"minValue": true}; }
        return null;
    }
}

Thank you.


回答1:


Here is a sample. It's a min value validator where you pass in a number to validate.

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

More details can be found in the Custom Validators official documentation page.




回答2:


The minValueValidator example basically shows that you can use a factory for your custom validator so it will be something like this:

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

In my case I use FormControl not Control

import { FormControl } from '@angular/forms';



回答3:


Another solution here that uses a little more Angular nuance:

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

Now you have a much more reusable html error message

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


来源:https://stackoverflow.com/questions/36756159/angular-2-custom-validator-with-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!