[英]Angular dynamic form with groups of elements getting from JSON
我正在进行角度应用并构建角度动态形式。
在这里,我试图将形式分为两部分,例如“人名”和“个人详细信息”。
对于“个人”,其名称适用于分组,但对于“个人”详细信息,其无效。
HTML :
<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 :
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
}
],
},
];
工作中的Stckblitz : https : //stackblitz.com/edit/angular-x4a5b6-5uj52y
一切正常,工作正常。.已经为“个人”名称及其工作建立了一个小组,但是对于“个人详细信息”,我无法找到输入框。
单个表格需要拆分,每个部分上方都有标题,这就是该表格的要求。
在这里{{question.key}}
在每个输入框上显示名称,但我只需要在顶部显示“ Person Name
。因为它是父标题,其余的如First Name
, Last Name
是输入框标签。如何在每个部分的前面单独显示父标题(“ 人名”(具有名字和姓氏),“个人详细信息”(具有电子邮件和移动电话) )...
我想分别按以下顺序分别分配标题。
人名
-> First Name
-> Last Name
个人资料
-> Email
-> Mobile Number
如果我对上述方法有误,请帮助我拆分此https://stackblitz.com/edit/angular-x4a5b6-geesde动态形式,如以下给定的方法。
我的表单需要看起来像这样https://stackblitz.com/edit/angular-zc34qr,但是它必须是纯角度动态表单和JSON加载。
请帮助我创建一个小组Personal Details
例如已经创建并正在工作的“ Person Name
。
卡住了很长时间,请帮我...
我不明白您为什么在这里创建其他formGroup:
this.form = new FormGroup({main: innerForm});
只需使用从服务中获取的formGroup:
动态表格。组件
this.form = this.qcs.toFormGroup(this.questions);
dynamic-form.component.html
<app-dynamic-group [questions]="questions" [form]="form"></app-dynamic-group>
现在,您无需在DynamicGroupComponent上实现ControlValueAccessor。 您将FormGroup传递给它,它应该足以动态生成表单。
dynamic-group.component.ts
@Component({
selector: 'app-dynamic-group',
templateUrl: './dynamic-group.component.html'
})
export class DynamicGroupComponent {
@Input() form: FormGroup;
@Input() questions: QuestionBase<any>[] = [];
}
dynamic-group.component.html
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.