angular - Angular Template 驱动表单动态表单部分
问题描述
我不知道用什么谷歌来找到我的问题的答案,所以我在这里问。我必须创建一个包含一个始终相同的部分的表单,有些输入字段每个表单只能填写一次。然后有一组字段,我想让用户创建多个实例。它看起来像这样:字段 1、字段 2、带有“添加字段 3-5”的按钮,如果单击它,您可以填写字段 3-5,之后您可以提交表单或添加另一个字段实例3-5 以此类推。我对 forntend 东西完全陌生,所以我不知道是否有这个词。无论如何,我会很感激你的帮助。
解决方案
Angular 的FormBuilder和FormArray将帮助您轻松实现这一目标。
您可以在创建并在 UI 中循环遍历它时定义一个FormArray
like a 。FormControl
FormGroup
demoForm: FormGroup;
submitted = false;
output = {}
get firstName(): FormControl {
return this.demoForm.controls["firstName"] as FormControl;
}
get lastName(): FormControl {
return this.demoForm.controls["lastName"] as FormControl;
}
get optionals(): FormArray {
return this.demoForm.controls["optionals"] as FormArray;
}
constructor(private _formBuilder: FormBuilder) {
this.demoForm = this._formBuilder.group({
firstName: this._formBuilder.control('', [Validators.required]),
lastName: this._formBuilder.control('', [Validators.required]),
optionals: this._formBuilder.array([]),
/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
});
}
并在您的 HTML 中
<form [formGroup]="demoForm">
<input type="text" formControlName="firstName" />
<input type="text" formControlName="lastName" />
<div formArrayName="optionals">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^ -->
<div [formGroupName]="i" *ngFor="let optionals of optionals.controls; index as i;">
<!-- ^^^^^^^^^^^^^^^^^^ -->
<input type="text" formControlName="attr1" />
<input type="text" formControlName="attr2" />
</div>
</div>
</form>
您可以使用以下方式从数组中添加或删除项目:
AddOptionalItems(){
// you can add validation here on each item individually.
const group = new FormGroup({
attr1: new FormControl(''),
attr2: new FormControl(''),
});
this.optionals.push(group);
}
RemoveOptionalItems(i:number){
this.optionals.removeAt(i);
}
这是一个更完整版本的小型堆栈闪电战。
编辑 :
一篇有用的文章:https ://netbasal.com/angular-reactive-forms-the-ultimate-guide-to-formarray-3adbe6b0b61a
推荐阅读
- python - 获取单词中字符的数值,并与编码的数字进行算术运算
- ajax - 如果在 laravel 中验证失败,则返回错误
- spring-boot - 轮询弹簧启动执行器端点的更好方法(流式传输而不是轮询?)
- xml - 使用scrapy,如何从标签内部获取价值
- subdomain - 添加自定义域
- c - 这个 C 程序根据学生排名对学生数组大小进行排序 5。那些排名需要通过选择和插入排序方法进行排序
- flutter - 如何在指定索引中添加值?
- javascript - javascript值gettng在函数中丢失
- python - 删除重复数据并将其余数据附加到 pandas
- sql - 如何在 Postgresql 中更新后创建触发器