gpt4 book ai didi

angular - 将一组字段动态添加到响应式(Reactive)表单

转载 作者:太空狗 更新时间:2023-10-29 19:36:36 25 4
gpt4 key购买 nike

我有 2 个输入字段:姓名和姓氏。我有 2 个按钮:提交和“添加一个人”。单击“添加人员”应添加一组新字段(姓名和姓氏)。如何实现?我找到了如何动态添加单个输入字段的解决方案,但在这里我需要添加一个集合

我的代码现在没有“添加一个人”功能:

import { FormControl, FormGroup, Validators } from '@angular/forms';
export class AppComponent implements OnInit {
form: FormGroup;
constructor(){}
ngOnInit(){
this.form = new FormGroup({
name: new FormControl('', [Validators.required, Validators.minLength(2)]),
lname: new FormControl('', [Validators.required, Validators.minLength(2)])
});
}
....
}

模板:

<form [formGroup]="form" (ngSubmit)="submit()">
Name: <input type="text" formControlName="name">
Last Name: <input type="text" formControlName="lname">
<button type="button">Add a Person</button>
<button type="submit">Submit</button>
</form>

最佳答案

您需要的是 FormArray。给定具有两个 FormControls name 和 surname 的多个元素,就像在您的示例中一样,您可以这样做: https://stackblitz.com/edit/angular-ztueuu

这是正在发生的事情:

您像以前一样定义表单组,但使用 FormArray 类型的一个字段创建它

ngOnInit() {
this.form = this.fb.group({
items: this.fb.array([this.createItem()])
})
}

接下来定义我们在 createItem() 上面使用的辅助方法,使我们与要相乘的一组控件分组

createItem() {
return this.fb.group({
name: ['Jon'],
surname: ['Doe']
})
}

最后是您希望在此集合中乘以项目的方法:

addNext() {
(this.form.controls['items'] as FormArray).push(this.createItem())
}

将其与下面的 html 合并。我们正在遍历数组项并显示组中的字段。这里的表单组名是数组的索引。

<form [formGroup]="form" (ngSubmit)="submit()">
<div formArrayName="items"
*ngFor="let item of form.controls['items'].controls; let i = index">
<div [formGroupName]="i">
<input formControlName='name'>
<input formControlName='surname'>
</div>
</div>
<button type="button" (click)="addNext()">Add Next</button>
<button type="submit">Submit</button>
</form>

并且您可以使用扩展的项目集创建表单。

关于angular - 将一组字段动态添加到响应式(Reactive)表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51449195/

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