Ожидаемый валидатор для возврата обещания или наблюдения
Я пытаюсь выполнить выборочную проверку на 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 (/пароль/)]],
валидаторы используют только второй параметр во внутреннем массиве. не для внешнего массива