У меня есть форма Angular 9, в которой связаны четыре поля. Один - это флажок, а остальные - ввод. Когда флажок установлен, поля ввода не должны быть пустыми, но когда он не установлен, это не имеет значения. Я хочу сделать для этого валидаторы, чтобы ошибки появлялись только тогда, когда поле пусто, а для первого поля установлено значение true.
Я также подумал о создании локального логического значения, представляющего состояние галочки, и передачи его валидатору вот так.
export function linkedFieldValidator(toggler: boolean): ValidatorFn {
console.log('updated');
return (control: AbstractControl): {[key: string]: any} | null => {
return (toggler && control.value === '') ? {linkedField: {value: control.value}} : null;
};
}
...
field: new FormControl('', linkedFieldValidator(this.checkboxvalue)),
...
Однако я полагаю, что это не работает, поскольку он передает значение логического значения только один раз и не обновляется после. Даже вызов updateValueAndValidity()
не работает, что для меня странно (если это не так, то в чем его цель?).
Структура моего FormGroup
выглядит примерно так:
this.form = this.formBuilder.group({
name: new FormControl(''), // don't care
address: new FormControl(''), // don't care
car: new FormControl(false), // do care - this is the checkmark
license_plate: new FormControl('', Validators.pattern(MY_LICENSE_PLATE_REGEX)), // shouldn't be empty when car
mileage: new FormControl('') // shouldn't be empty when car
hair: new FormControl(false), // do care - this is the checkmark
hair_color: new FormControl(''), // shouldn't be empty when hair
});
Как видите, у меня есть пара FormControll
друг через друга, и я хочу, чтобы была связана только пара из них. Еще одна важная вещь, которую следует отметить, заключается в том, что, хотя вся форма может стать недействительной при нарушении одного из этих условий, я хочу иметь возможность обрабатывать каждую ошибку индивидуально, чтобы я мог отображать правильные сообщения в нужных местах.
У меня больше нет идей, кто-нибудь может мне помочь? Использую реактивные формы.