我有一个行列表,每个行都有一些选择,输入和一个看起来像这样的复选框
<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看起来像这样
updateForm(charge) {
const controlNames = ['20', '40', '40hc', 'Currency', 'Unit'];
for (let name of controlNames) {
this.chargesForm.controls[charge + name].updateValueAndValidity();
// debugger
}
}
但是,当我取消选择一行时,该行的所有FormControl都有
错误:{required:true}
除Validators.required外,似乎所有验证程序都在清除中。我已经尝试过了
this.chargesForm.controls [charge + name] .clearAsyncValidators();
除clearValidators()外,没有任何效果(这很有意义,因为我没有设置任何异步验证)。我也尝试过This solution,但没有运气。
谢谢您的时间。