Я пытаюсь выяснить, как получить дочерние элементы управления AbstractControl / FormControl во вложенной угловой реактивной форме.
Моя ситуация в том, что я пытаюсь сравнить значение 2 элементов управления формы, которые вложены в, FormGroup> FormArray> FormGroup> FormArray> FormGroup
Я использую пользовательский валидатор, чтобы убедиться, что в самом FormGroup самого глубокого уровня одно значение FormControl больше другого другого значения FormControl, но я не могу получить одноуровневый FormControls.
Я передал другое имя элемента управления в виде строки для пользовательского валидатора:
static IsGreaterThan(GreaterThanControlName: string) : ValidatorFn | null {
return (control: AbstractControl) : { [key: string]: any } => {
const x = control.parent;
const y = x.get(GreaterThanControlName);
...
}
}
Идея проста: я вызываю control.parent, чтобы получить родительскую FormGroup, а затем использую .get (GreaterThanControlName), чтобы получить элемент управления FormGroup, который я ищу.
Когда я включаю только:
const x = control.parent
Группа форм извлекается и отображается (при записи в консоль), как и ожидалось.
Однако, если я тогда включу:
const y = x.get(GreaterThanControlName);
или
const y = x.controls;
Я получаю ошибку:
TypeError: Cannot read property 'get' of undefined
control.parent теперь считается неопределенным, тогда как ранее он возвращал FormGroup, и единственное отличие состоит в том, что я пытаюсь получить один или несколько элементов управления из родительской FormGroup исходного элемента управления.
Я мог бы потенциально использовать .root (), однако требование пройти через несколько FormGroups и FormArrays было бы громоздким решением проблемы.
Так как же мне получить извлечение Sibling FormControls из глубоко вложенной формы?
Любой совет относительно того, как решить эту проблему или улучшить мое понимание углов, очень важен.
Если для описания ситуации требуется больше кода, пожалуйста, не стесняйтесь спрашивать