使用API​​中的动态字段进行多步骤表单生成

时间:2019-05-29 12:34:16

标签: angular forms angular-material

我从GraphQL API得到类似的响应:

{
    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);
            });
        });

在我的情况下,它不起作用,因为我没有一个表单,但是根据房间的数量,我可以有多个表单,而且我也没有定义控件名称。

0 个答案:

没有答案