Ожидаемый валидатор для возврата обещания или наблюдения

Я пытаюсь выполнить выборочную проверку на Angular 5, но я столкнулся со следующей ошибкой

Expected validator to return Promise or Observable

Я просто хочу вернуть ошибку в форму, если значение не соответствует требуемому, heres my code:

Это компонент, где моя форма

  constructor(fb: FormBuilder, private cadastroService:CadastroService) {
    this.signUp = fb.group({
      "name": ["", Validators.compose([Validators.required, Validators.minLength(2)])],
      "email": ["", Validators.compose([Validators.required, Validators.email])],
      "phone": ["", Validators.compose([Validators.required, Validators.minLength(5)])],
      "cpf": ["", Validators.required, ValidateCpf]
    })     
   }

Этот код находится в файле с проверкой, которую я хочу реализовать:

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

export function ValidateCpf(control: AbstractControl){
    if (control.value == 13445) {
        return {errorCpf: true}
    }
    return null;
}

Кто-нибудь может мне помочь? Этот тип валидации работает только с наблюдаемыми или я могу сделать это, не будучи обещанием или наблюдаемым? Спасибо

Ответ 1

Это означает, что вам нужно добавить несколько валидаторов в массив

, Пример:

С ошибкой

profileFormGroup = {
  budget: [null, Validators.required, Validators.min(1)]
};

Выше одной ошибки выдает, что валидатор возвращает Promise или Observable

Исправление:

profileFormGroup = {
  budget: [null, [Validators.required, Validators.min(1)]]
};

Объяснение:

В angular Реактивных формах валидация выполняется с помощью встроенных валидаторов, которые могут быть заданы в массиве во втором положении, когда несколько валидаторов использовали.

FIELD_KEY: [INITIAL_VALUE, [LIST_OF_VALIDATORS]]

Ответ 2

Следующее должно работать:

  "cpf": ["", [Validators.required, ValidateCpf]]

аргументы, которые ожидает контроль формы, следующие:

constructor(formState: any = null, 
            validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
            asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null)

от https://angular.io/api/forms/FormControl

Ответ 3

Validators.compose() является избыточным;

Вы можете просто передать массив. Проблема OP вызвана невозможностью обернуть валидаторы в [], чтобы сделать их массивом, поэтому предполагается, что minLength() является асинхронным, и в результате появляется сообщение об ошибке.

Надеюсь, это решение поможет вам. Благодарю.

Ответ 4

ошибка:  Ник: [ '', [Validators.required, Validators.minLength(3)], forbiddenNameValidator (/пароль/)],

анс:  Ник: [ '', [Validators.required, Validators.minLength(3), forbiddenNameValidator (/пароль/)]],

валидаторы используют только второй параметр во внутреннем массиве. не для внешнего массива