У меня есть список строк, каждая из которых имеет несколько вариантов выбора, входных данных и флажок, который выглядит так
<mat-checkbox [(ngModel)]="chargeApply[charge]" [ngModelOptions]="{standalone: true}"
(change)="setChargeValidators(charge, $event.checked)"></mat-checkbox>
Целью setChargeValidators является добавление/удаление валидаторов для строки, которая была выбрана/не выбрана, это функция (есть много дополнительных вещей, которые работают нормально, но я не объясняю о функции, важная часть - очистка валидаторов когда выбрано значение false, а CELL_VALIDATION — это массив, содержащий Validators.required):
setChargeValidators(charge: string, selected: boolean) {
if (selected) {
this.chargesSelected = true;
this.chargesForm.controls[charge + '20'].setValidators(CELL_VALIDATION);
this.chargesForm.controls[charge + '40'].setValidators(CELL_VALIDATION);
this.chargesForm.controls[charge + '40hc'].setValidators(CELL_VALIDATION);
this.chargesForm.controls[charge + 'Currency'].setValidators(Validators.required);
this.chargesForm.controls[charge + 'Unit'].setValidators(Validators.required);
} else {
const controlNames = ['20', '40', '40hc', 'Currency', 'Unit'];
for (let name of controlNames) {
if (name !== 'Currency' ) {
this.chargesForm.controls[charge + name].reset();
}
this.chargesForm.controls[charge + name].clearValidators();
}
for (let chargeName in this.chargeApply) {
if (this.chargeApply[chargeName]) {
return;
}
}
this.chargesSelected = false;
}
this.updateForm(charge);}
Форма обновления выглядит так
updateForm(charge) {
const controlNames = ['20', '40', '40hc', 'Currency', 'Unit'];
for (let name of controlNames) {
this.chargesForm.controls[charge + name].updateValueAndValidity();
// debugger
}
}
Однако, когда я отменяю выбор строки, все FormControls этой строки имеют
ошибка: {обязательно: правда}
Вроде очищаются все валидаторы, кроме Validators.required. я пытался сделать
this.chargesForm.controls[заряд + имя].clearAsyncValidators();
В дополнение к clearValidators() без эффекта (что имеет смысл, поскольку я не устанавливаю асинхронную проверку). Я также пробовал Это решение не помогло.
Спасибо за ваше время.