Многошаговая генерация форм с динамическими полями из API - PullRequest
0 голосов
/ 29 мая 2019

Я получаю ответ, аналогичный этому, из API GraphQL:

{
    metrics: [
         0: {
             metric: { id: 1, name: 'xMetric', category: { id: 1, name: 'xCat'}},
             room: { id: 1, name: 'xRoom'}
         },
    ... // It continues with metric objects
    ],
    checks: [
        0: {
             checks: { id: 1, name: 'xCheck', category: { id: 1, name: 'xCat'}},
             room: { id: 1, name: 'xRoom'}
         },
    ... // It continues with checks
    ]

}

Мне нужно сгенерировать поля формы для каждой комнаты, и каждая комната будет содержать несколько категорий.

То, что я сделал, я сгруппировал по комнатам, затем отфильтровал массив комнат, чтобы они не содержали дубликатов с lodash, и сделал то же самое с категориями каждой комнаты. Затем я сгенерировал поля каждой категории, в которые пользователь должен будет записать ввод, чтобы мы могли сохранить его позже.

Мне нужно сгенерировать несколько форм на основе количества комнат, а затем несколько категорий на основе комнаты и несколько полей на основе этих категорий.

Это шаблон, которому я следовал: https://material.angular.io/components/stepper/examples.

Но то, что я не могу заставить работать, это правильно генерировать количество форм.

Вот как я динамически генерирую форму с несколькими динамическими полями:

this.ourXParameters$.subscribe(params => {
            this.siteSubsystems = _.map(params, subsystem => subsystem.name);
            _.forEach(siteParametersPerSubsystem, subsystem => {
                const group = this.formBuilder.group({});
                _.forEach(subsystem.parameters, parameter => {
                    const control = this.formBuilder.control(null, parameter.mandatory ? Validators.required : null);
                    // add control in the control group of the form and keep an index via parameter id (east access later)
                    group.addControl(`parameter_${parameter.id}`, control);
                    _.set(this._controlsPerParameterId, parameter.id, control);
                });
                (<FormArray>this.xForm.controls['subsystems']).push(group);
            });
        });

В моем случае это не работает, потому что у меня нет только одной формы, но в зависимости от количества комнат у меня может быть несколько форм, и у меня также не определено имя элемента управления.

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