VK_31
@VK_31
Постоянно учусь

Как создать валидатор элементов массива?

Вечер добрый.
Есть необходимость проверять наличие элемента в массиве по значению из инпута и выдавать соответсвующее сообщение. Делаю следующим образом:
export function inArrayValidator(array: Array<Tag>): ValidatorFn {
    return (control: AbstractControl): {[key: string]: any} | null => {
        const forbidden = array.filter( i => i.name == (control.value !== null ? control.value.trim().toLowerCase() : null)).length != 0;
        return forbidden ? {'inArray': {value: control.value}} : null;
  };
}
...
export class TagListComponent  implements OnInit {
    public tagFormGroup: FormGroup;
    private tagSubscription: Subscription;
    ngOnInit() {
        this.tagFormGroup= new FormGroup({
            name: new FormControl(null)
        });

        this.tagSubscription = this.tagFormGroup.get('name').valueChanges.subscribe(_ => {
            this.tagFormGroup.get('name').setValidators([Validators.required, inArrayValidator(this.tags)]);
        });
    }
}


Может быть есть какое-то более изящное решение без постоянного setValidators?
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы