#angular #angular-reactive-forms
Вопрос:
У меня есть таблица в моем приложении angular, где я храню некоторые данные (пользователи, электронная почта и т. Д.), Я могу добавлять новых пользователей , и в моей форме есть поле ввода , в котором я могу ввести номер важности (1, 2, 3 и т. Д.), И, конечно, должно быть только одно из каждого числа. Я хочу показать сообщение об ошибке, если введенный номер уже существует в моей базе данных. Есть ли способ использовать валидатор для его проверки?
Комментарии:
1. Вы имеете в виду асинхронный валидатор ?
2. Используйте асинхронный валидатор angular.io/api/forms/AsyncValidator . Если возникнут какие-либо проблемы, поделитесь своим кодом
3. это то, что я искал, спасибо, я попробую
Ответ №1:
Вам следует добавить пользовательский асинхронный валидатор.
Следующий код создает класс валидатора CheckIfNumberExistsValidator, который реализует интерфейс AsyncValidator.
@Injectable({ providedIn: 'root' })
export class CheckIfNumberExistsValidator implements AsyncValidator {
constructor(private numbersService: NumbersService) {}
validate(
ctrl: AbstractControl
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
return this.numbersService.isNumberTaken(ctrl.value).pipe(
map(isTaken => (isTaken ? { uniqueNumber: true } : null)),
catchError(() => of(null))
);
}
}
Ваша форма должна выглядеть так:
this.yourForm = new FormGroup({
number: new FormControl(0, {
asyncValidators: [this.CheckIfNumberExistsValidator.validate.bind(this.CheckIfNumberExistsValidator )],
updateOn: 'blur' // You can delay updating the form validity
}),
});
Служба NumbersService будет отвечать за выполнение HTTP — запроса к базе данных numbers.
Этот метод возвращает значение null, если форма допустима, и ошибки проверки, если это не так.
Примечание: Не забудьте ввести CheckIfNumberExistsValidator
Для получения дополнительной информации проверьте: https://angular.io/guide/form-validation#implementing-a-custom-async-validator