Какое правильное возвращаемое значение для функции ValidatorFn в Angular? - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть следующий код в моем пользовательском валидаторе:

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

// Credit for this function:
// https://stackoverflow.com/a/17390131/2044
function isPrime(aNumber: number): boolean {
  let start: number = 2;
  const limit: number = Math.sqrt(aNumber);
  while (start <= limit) {
    if (aNumber % start++ < 1) {
      return false;
    }
  }
  return aNumber > 1;
}

export class NumberValidators {
  static isPrimeNumber(): ValidatorFn {
    return (control: AbstractControl): { [key: string]: boolean } | null => {
      if (isPrime(control.value)) {
        return null;
      }
      return {
        isPrimeNumber: true
      };
    };
  }

Этот код работает;однако, это кажется мне задом наперед.Кажется, что оператор if отклонен на 180 градусов - он должен возвращать объект (с true), когда значение проверяется, и ноль, когда это не так.

Так что мой вопрос: чтоздесь происходит?

1 Ответ

0 голосов
/ 16 февраля 2019

Я допускаю, что возвращаемое значение для валидатора выглядит немного странно, но в документах есть вся необходимая информация: https://angular.io/api/forms/ValidatorFn

Функция, которая получает элемент управления и синхронно возвращаеткарта ошибок валидации, если есть, в противном случае - ноль.

По определению функция валидатора возвращает ноль, если ошибки нет.Иначе, он возвращает объект, где ошибка определяется ключом.

Это именно то, что говорит подпись этого метода:

(control: AbstractControl): { [key: string]: boolean } | null 

Эта функция валидатора принимает входные данные типа абстрактного управления и возвращает ЛИБО объект, где ключ является строкой, азначение является логическим ИЛИ null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...