Я создаю служебную функцию для отслеживания всех ошибок проверки полей формы при отправке формы, используя реактивные формы Angular 4.
У меня есть несколько экземпляров вложенных групп FormGroups в этих формах, например: два вложенных«адрес» из группы (для дома и доставки). Примечание: они вложены только в один уровень глубиной внутри родительской группы FormGroup.
В настоящее время я могу заставить это работать только с одной вложенной группой FormGroup согласно приведенному ниже коду.
Как я могу заставить это работать с формами, которые имеют несколько экземпляров вложенных групп formGroup, не создавая еще один уровень для цикла for, приведенного ниже ..
Я прошел путь рекурсивной функции(прокомментировано в коде), но оператор 'return' выполняется до того, как рекурсивная функция завершает работу, и выводит пустой массив ...
Очень ценю вашу помощь с этими парнями.
// utilities.service.ts
const focus: string = UtilitiesService.getAllFormErrors(formGroup)[0];
public static getAllFormErrors(formGroup: FormGroup): string[] {
let fieldName: string[] = [];
for (const value in formGroup.controls) {
const ctrl = formGroup.get(value);
if (ctrl instanceof FormGroup) {
// tried calling recursive function here - this.getAllFormErrors(ctrl);
// loop around new formControls in nested FormGroup
for (const value in ctrl.controls) {
const nestedCtrl = ctrl.get(value);
if (nestedCtrl.errors !== null) {
fieldName.push(value);
}
}
} else if (ctrl.errors !== null) {
fieldName.push(value);
}
}
return fieldName;
}
// expect the 'focus' variable to return the first field throwing a validation error