Вечер добрый.
Есть необходимость проверять наличие элемента в массиве по значению из инпута и выдавать соответсвующее сообщение. Делаю следующим образом:
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?