#angular #angular-validator
Вопрос:
Я использую angular reactive formsGroup и FormControl. мое требование состоит в том, что значение каждого элемента управления формой должно быть уникальным, и если пользователь попытается добавить повторяющееся значение, оно должно показать ошибку проверки.
Создание группы форм
this.contryCodeForm = this.formBuilder.group({
US: [' 1', , [],[this.uniqueValidator, Validators.required]],
UK: [' 44', [],[this.uniqueValidator, Validators.required]],
India: [' 91', [],[this.uniqueValidator, Validators.required]],
email: [' 61', [],[this.uniqueValidator, Validators.required]]
});]
Я хочу добавить проверку, если кто-то попытается отредактировать значение, уже принятое другой страной.
Я попытался реализовать this.UniqueValidator
const values = Object.keys(formGroup.value).map(key => formGroup.value[key])
const filtered = values.filter(x=>x === control.value);
if (filtered.length > 1) {
return {message: "This field must be unique value"}
}
но это не работает
любая помощь будет признательна
Ответ №1:
Я думаю, тебе следует это сделать:
- Создайте валидатор, который принимает форму группы
export class MyOwnValidator {
static checkDuplicates(formGroup: FormGroup): ValidationErrors | null {
//here you can get access to all controls
and implement the logic for checking duplicates
}
}
- Добавьте этот валидатор в группу форм
this.contryCodeForm = this.formBuilder.group({
US: [' 1', , [],[ Validators.required]],
UK: [' 44', [],[ Validators.required]],
India: [' 91', [],[Validators.required]],
email: [' 61', [],[Validators.required]]
}, , {
validators: MyOwnValidator.checkDuplicates
})