Обычно валидаторы проверяют только предоставленное значение формы, но мне интересно, возможно ли иметь доступ к свойствам из CustomFormControl внутри моего валидатора. Я хочу, потому что значение в моем CustomFormControl это просто идентификатор. Хотя я хочу сохранить возможность добавления валидатора в построителе форм.
В настоящее время я решил эту проблему, добавив новое свойство к ngControl.control
объекту, но, может быть, есть гораздо лучшее решение?
Это моя форма, в которую я добавил свой валидатор my CustomFormControl
this.invoiceForm = this.formBuilder.group({
submittedBy: ["", isActiveValidator]
});
Это мой валидатор, обратите внимание, что я назвал c.selectedItem?.isActive
- selectedItem - новое свойство.
export function isActiveValidator(c: MyControlTypeahead): any {
return c.selectedItem?.isActive ? null : {
isActiveError: {
id: c.value
}
};
}
И эта часть моего элемента управления пользовательской формы. Когда элемент выбран, я добавляю новое свойство к своему поврежденному ngControl
export interface MyControlTypeahead extends AbstractControl {
selectedItem: MyItem;
}
@Component({
selector: "app-party-typeahead",
templateUrl: "./app-party-typeahead.component.html"
})
export class PartyTypeaheadComponent implements ControlValueAccessor, OnInit {
constructor(
@Self() private ngControl: NgControl) {
ngControl.valueAccessor = this;
}
onChange(item: MyItem): void {
(this.ngControl.control as MyControlTypeahead).selectedItem = item;
this._onChange(item?.id);
}
....
Вместо добавления нового свойства к ngControl
Я хотел бы назначить новый элемент локальной переменной this.selectedItem = item
и каким-то образом в моем валидаторе есть доступ к этому свойству, но я понятия не имею, как мне этого добиться?