Я реализовал эти два метода, чтобы получить эту функциональность.
Первый - это помощник, который возвращает имя элемента управления (так как он проиндексирован в его родительском элементе). Функция достигает этого путем поиска в объекте controls
своего родителя элемента управления, равного тому, который вы ему дали, и затем возврата ключа.
Вторая - это рекурсивная функция, которая вызывает возвращаемое имя элемента управления с помощью описанного выше помощника и вызывает себя для родительского элемента управления, объединяя возвращаемую строку с точками ('.').
getControlName(c: AbstractControl): string | null {
if(!c.parent) return null;
const formGroup = c.parent.controls;
return Object.keys(formGroup).find(name => c === formGroup[name]) || null;
}
getControlPath(c: AbstractControl, path: string): string | null {
path = this.getControlName(c) + path;
if(c.parent && this.getControlName(c.parent)) {
path = "."+path;
return this.getControlPath(c.parent, path);
} else {
return path;
}
}