Я делаю веб-приложение на Angular 8.3.4. У меня есть форма, использующая Reactive Forms, и я хочу добавить Async Validation, чтобы убедиться, что введенное имя уникально. Я прочитал множество примеров, но по какой-то причине у меня не работает.
Сервис
export class BrandService {
brands: Observable<BrandId[]>;
}
Компонент
export class CreateNewComponent {
form: FormGroup;
constructor(
private formBuilder: FormBuilder,
private brandService: BrandService
) {
// Creates a form group
this.form = this.formBuilder.group({
name: ['', Validators.compose([
Validators.required,
Validators.minLength(6),
CustomValidator.unique(this.brandService.brands)
])]
});
}
}
Пользовательский валидатор
export class CustomValidator {
static unique(brands: Observable<BrandId[]>) {
return (control: AbstractControl) => {
const name = control.value.toLowerCase();
return brands.pipe(
map(items => items.filter(b => b.name.toLowerCase() === name)),
map(items => items.length ? {unique: false} : null)
);
};
}
}
Я передаю Observable службы из компонента в CustomValidator. Прямо сейчас, элемент управления имеет: status: "INVALID"
Кстати, что я должен явно возвращать в моем методе unique
?
Моя цель - узнать, существует ли имя вмассив Observable для возврата контрольной ошибки.