gpt4 book ai didi

javascript - Angular 动态表单,包含从 JSON 获取的元素组

转载 作者:行者123 更新时间:2023-12-01 01:30:10 24 4
gpt4 key购买 nike

我正在进行 Angular 应用并构建 Angular 动态形式。

在这里,我尝试将表单分为两部分,例如人名和个人详细信息..

对于“人名”,它可以用于分组,但对于“个人详细信息”,它不起作用。

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..因为它是父项title 和其余的如 First NameLast Name 是输入框标签。如何在每个部分之前单独显示父标题(人名(有名字和姓氏),个人详细信息(有电子邮件和手机))...

我希望将订单完全按照下面的方式进行拆分,并分别为每个订单添加标题。

人名

 -> First Name
-> Last Name

个人详细信息

 -> Email
-> Mobile Number

如果我的上述方法有误,请帮助我分割此https://stackblitz.com/edit/angular-x4a5b6-geesde动态形式就像下面给出的方法..

我的表单需要如下所示 https://stackblitz.com/edit/angular-zc34qr但它需要是纯 Angular 动态形式和 JSON 加载..

请帮助我创建一个个人详细信息组,例如已经创建并正在运行的人名

在这个问题上停留了很长时间,请帮助我......

最佳答案

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

this.form = new FormGroup({main: innerForm});

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

dynamic-form.component.ts

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>

<强> Forked Stackblitz

关于javascript - Angular 动态表单,包含从 JSON 获取的元素组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com