Как получить одноуровневые элементы управления Angular 6 AbstractControl во вложенной форме? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь выяснить, как получить дочерние элементы управления 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 из глубоко вложенной формы?

Любой совет относительно того, как решить эту проблему или улучшить мое понимание углов, очень важен.

Если для описания ситуации требуется больше кода, пожалуйста, не стесняйтесь спрашивать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...