Валидатор уникальных значений для группы форм angular2

#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:

Я думаю, тебе следует это сделать:

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

 
  1. Добавьте этот валидатор в группу форм
 this.contryCodeForm = this.formBuilder.group({
            US: [' 1', , [],[ Validators.required]],
            UK: [' 44',  [],[ Validators.required]],
            India: [' 91', [],[Validators.required]],
            email: [' 61', [],[Validators.required]]
        }, , {
            validators: MyOwnValidator.checkDuplicates
        })