items
- это FormArray
, и способ очистки элементов управления не работает.
Проверьте этот код
Object.keys(formGroup.controls).forEach(key => {
formGroup.controls[key].setErrors(null);
});
Представьте, что вы нажали items
здесь ключ
formGroup.controls['item'] // this is a FormArray and
// not FormControl so setErrors(null) won't work here
Один из способов исправить это - проверить экземпляр FormArray, затем выполнить итерацию по полю элементов управления, и вы можете использовать функции clearValidators
и updateValueAndValidty
.
if (formGroup.controls[key] instanceof FormArray) {
const control = formGroup.get(key) as FormArray;
for (let i = 0; i < control.controls.length; i++) {
const formGroup = control.controls[i] as FormGroup;
Object.keys(formGroup.controls).forEach(field => {
const control = formGroup.get(field);
control.clearValidators();
control.updateValueAndValidity();
});
}
}
Вот демонстрация stackblitz: https://stackblitz.com/edit/angular-f7pflm?file=src%2Fapp%2Fapp.component.ts
Вот как ваш clearErrorsFromFormGroup
woud теперь выглядит
private clearErrorsFromFormGroup(formGroup: FormGroup): void {
Object.keys(formGroup.controls).forEach(key => {
formGroup.controls[key].setErrors(null);
if (formGroup.controls[key] instanceof FormArray) {
const control = formGroup.get(key) as FormArray;
for (let i = 0; i < control.controls.length; i++) {
const formGroup = control.controls[i] as FormGroup;
console.log('control', control);
Object.keys(formGroup.controls).forEach(field => {
const control = formGroup.get(field);
control.clearValidators();
control.updateValueAndValidity();
});
}
}
});
}