首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从JSON获取元素组的角动态形式

从JSON获取元素组的角动态形式
EN

Stack Overflow用户
提问于 2018-11-18 03:11:39
回答 1查看 1.3K关注 0票数 0

我正在做角的应用和角度动态形式的建设。

在这里,我试图把形式分成两部分,如人名和个人细节。

对于个人,将其命名为用于分组,而对于个人详细信息,则不起作用。

代码语言:javascript
复制
<div *ngIf="form">
  <div *ngFor="let question of questions" class="form-row" [formGroup]="form">
      <ng-container *ngIf="!question.children">
        <app-question [question]="question" [form]="form"></app-question>
      </ng-container>
      <ng-container *ngIf="question.controlType === 'group' && question.children && question.children.length > 0">
        <app-dynamic-group [questions]="question.children" [form]="form.controls[question.key]" [key]="question.key" [formControlName]="question.key"></app-dynamic-group>
      </ng-container>
  </div>
</div>

JSON

代码语言:javascript
复制
  jsonData: any = [
    {
      "elementType": "group",
      "key": "person_name",
      "children": [
        {
          "elementType": "textbox",
          "class": "col-12 col-md-4 col-sm-12",
          "key": "first_name",
          "label": "First Name",
          "type": "text",
          "value": "",
          "required": true,
          "minlength": 3,
          "maxlength": 20,
          "order": 1
        },
        {
          "elementType": "textbox",
          "class": "col-12 col-md-4 col-sm-12",
          "key": "last_name",
          "label": "Last Name",
          "type": "text",
          "value": "",
          "required": true,
          "order": 2
        }
     ],
    },
        {
      "elementType": "group",
      "key": "personal_details",
      "children": [
        {
          "elementType": "textbox",
          "class": "col-12 col-md-4 col-sm-12",
          "key": "email",
          "label": "Email",
          "type": "text",
          "value": "",
          "required": true,
          "minlength": 3,
          "maxlength": 20,
          "order": 1
        },
        {
          "elementType": "textbox",
          "class": "col-12 col-md-4 col-sm-12",
          "key": "mobile",
          "label": "Mobile",
          "type": "text",
          "value": "",
          "required": true,
          "order": 2
        }
     ],
    },
  ];

The working Stckblitzhttps://stackblitz.com/edit/angular-x4a5b6-5uj52y

就工作而言,一切都很好。已经有一个组是为了人名和它的工作状态而创建的,但是对于个人细节,我找不到输入框。

一个单一的表单需要被拆分,标题高于每个部分,这是这个表单的要求。

在这里,{{question.key}}在每个输入框上显示名称,但我只需要在顶部显示Person Name。因为它是父标题,其余的如First NameLast Name是输入框标签。如何在每个部分的前面单独显示父标题(个人名称(有名和姓),个人详细信息(有电子邮件和移动))

我想把订单分拆,就像下面分别写的标题一样。

人名

代码语言:javascript
复制
 -> First Name
 -> Last Name

个人资料

代码语言:javascript
复制
 -> Email
 -> Mobile Number

如果上面的方法我错了,那么请帮助我拆分这个https://stackblitz.com/edit/angular-x4a5b6-geesde动态表单,如下所示。

我的表单需要看起来像这个https://stackblitz.com/edit/angular-zc34qr,但它需要是纯角度动态形式和JSON加载。

请帮助我创建一个Personal Details组,就像Person Name一样,它已经创建并工作了。

在这里呆很长时间请帮帮我..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-18 08:18:50

我不明白为什么在这里创建额外的formGroup:

代码语言:javascript
复制
this.form = new FormGroup({main: innerForm});

只需使用您从服务中获得的formGroup:

dynamic-form.component.ts

代码语言:javascript
复制
this.form = this.qcs.toFormGroup(this.questions);

dynamic-form.component.html

代码语言:javascript
复制
<app-dynamic-group [questions]="questions" [form]="form"></app-dynamic-group>

现在,您不需要在ControlValueAccessor上实现DynamicGroupComponent。您将FormGroup传递给它,它应该足够动态地生成表单。

dynamic-group.component.ts

代码语言:javascript
复制
@Component({
  selector: 'app-dynamic-group',
  templateUrl: './dynamic-group.component.html'
})
export class DynamicGroupComponent {
  @Input() form: FormGroup;

  @Input() questions: QuestionBase<any>[] = [];
}

dynamic-group.component.html

代码语言:javascript
复制
<div *ngFor="let question of questions" class="form-row">
    <app-question *ngIf="!question.children" [question]="question" [form]="form"></app-question>

    <app-dynamic-group 
       *ngIf="question.controlType === 'group' && question.children && question.children.length"
       [form]="form.get(question.key)"
       [questions]="question.children">
    </app-dynamic-group>
</div>

叉式斯塔克布利茨

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53357556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档