Custom ValidatorFn - угловой 6 - PullRequest
0 голосов
/ 03 июня 2018

Я хочу создать собственный универсальный валидатор, который будет передавать по параметру шаблон регулярного выражения и имя свойства (группы форм), которое будет проверяться.У меня есть следующий код

UserName: new FormControl('',
      [
        Validators.required,
        Validators.minLength(8),
        this.OnlyNumbersAndLetterValidator(/^[a-zA-Z0-9]+$/, "UserName")
      ]
    )

OnlyNumbersAndLetterValidator(regexPattern: RegExp, propertyName: string): ValidatorFn {
        return (currentControl: AbstractControl): { [key: string]: any } => {
          if (!regexPattern.test(currentControl.value)) {
            return { propertyName: true }
          }
        }
      }

Проблема в том, что, когда выражение недопустимо, вернуть "{propertyName: true}" вместо "{UserName: true} ", в чем проблема?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Вы возвращаете { propertyName: true }, что означает объект со свойством с именем propertyName

. То, что вы хотите сделать, это:

let returnValue = {};
returnValue[propertyName] = true;
return returnValue;
0 голосов
/ 03 июня 2018

Создайте временный объект и затем вернитесь.Здесь propertyName in return { propertyName: true } является строкой, а не входной переменной.

OnlyNumbersAndLetterValidator(regexPattern: RegExp, propertyName: string): ValidatorFn {
        return (currentControl: AbstractControl): { [key: string]: any } => {
          if (!regexPattern.test(currentControl.value)) {
           let temp = {};
           temp[propertyName] = true;
            return temp;
          }
        }
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...