Ожидаемый валидатор для возврата Promise или Observable - PullRequest
0 голосов
/ 27 мая 2018

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

Expected validator to return Promise or Observable

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 08 марта 2019

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

.Пример:

с ошибкой

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

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

Исправлено:

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

Объяснение:

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

FIELD_KEY: [INITIAL_VALUE, [LIST_OF_VALIDATORS]]

0 голосов
/ 06 апреля 2019

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

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

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

0 голосов
/ 27 мая 2018

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

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

аргументы, ожидаемые элементом управления формы, следующие:

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

из https://angular.io/api/forms/FormControl

...