*ngFor
这是一个挑战。我会尽我所能陪你度过难关。
formArrayName
this.formBuild.array([])
... 随便你怎么说,我刚用过
格式名称
用于演示目的。
在使用空数组调用实例化表单之后
this.buildForm()
constructor(private formBuilder: FormBuilder) {
this.thisIsMyForm = new FormGroup({
formArrayName: this.formBuilder.array([])
})
this.buildForm();
}
在你的
buildForm()
迭代你的
data[]
并为每个索引推送控件,同时指定默认值和默认状态“禁用”。
buildForm() {
const controlArray = this.thisIsMyForm.get('formArrayName') as FormArray;
Object.keys(this.data).forEach((i) => {
controlArray.push(
this.formBuilder.group({
name: new FormControl({ value: this.data[i].name, disabled: true }),
type: new FormControl({ value: this.data[i].type, disabled: true })
})
)
})
console.log(controlArray)
}
请注意:
name
和
type
0: FormGroup
1: FormGroup
2: FormGroup
thisIsMyForm
你刚刚创造了。
-
起源:
-
儿童:
格式名称
-
孙女:
i as formGroupName
孙子很重要,因为它与的控制台日志相匹配
controlArray.controls
在上一步中
<form id="myForm" [formGroup]="thisIsMyForm">
<div [formArrayName]="'formArrayName'">
<mat-card *ngFor="let x of data; let i = index">
<div [formGroupName]="i">
基于控件禁用状态创建编辑和保存按钮
<button *ngIf="formControlState(i)" (click)="toggleEdit(i)">Enable Edit</button>
<button *ngIf="!formControlState(i)" (click)="toggleEdit(i)">Save</button>
在组件中创建方法以接收索引作为参数,并处理隐藏按钮和切换输入字段启用和禁用状态的逻辑。
toggleEdit(i) {
const controlArray = this.thisIsMyForm.get('formArrayName') as FormArray;
if(controlArray.controls[i].status === 'DISABLED'){
controlArray.controls[i].enable()
}else{
controlArray.controls[i].disable()
}
}
formControlState(i){
const controlArray = this.thisIsMyForm.get('formArrayName') as FormArray;
return controlArray.controls[i].disabled
}
<button [disabled]="thisIsMyForm.get('formArrayName').enabled" (click)="onSubmit()">Submit Form</button>
onSubmit() {
// Here I would like to be able to access the values of the 'forms'
console.log(this.thisIsMyForm.value)
}
闪电战
https://stackblitz.com/edit/dynamic-form-ngfor-otbuzn?embed=1&file=src/app/app.component.ts