在Angular中,FormArray
是一种用于处理动态表单字段的机制。如果你需要在一个 FormArray
中循环遍历另一个 FormArray
,可以通过嵌套的 *ngFor
指令来实现。以下是一个详细的示例,展示了如何在Angular组件中实现这一功能。
假设我们有两个 FormArray
,一个是 outerFormArray
,另一个是嵌套在其中的 innerFormArray
。我们将展示如何在模板中循环遍历这些数组。
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
@Component({
selector: 'app-dynamic-form',
templateUrl: './dynamic-form.component.html',
})
export class DynamicFormComponent {
dynamicForm: FormGroup;
constructor(private fb: FormBuilder) {
this.dynamicForm = this.fb.group({
outerFormArray: this.fb.array([
this.fb.group({
innerFormArray: this.fb.array([
this.fb.control('Item 1'),
this.fb.control('Item 2'),
]),
}),
this.fb.group({
innerFormArray: this.fb.array([
this.fb.control('Item 3'),
this.fb.control('Item 4'),
]),
}),
]),
});
}
get outerFormArray(): FormArray {
return this.dynamicForm.get('outerFormArray') as FormArray;
}
get innerFormArray(index: number): FormArray {
return this.outerFormArray.at(index).get('innerFormArray') as FormArray;
}
}
<form [formGroup]="dynamicForm">
<div formArrayName="outerFormArray">
<div *ngFor="let group of outerFormArray.controls; let i = index" [formGroupName]="i">
<h3>Outer Group {{ i + 1 }}</h3>
<div formArrayName="innerFormArray">
<div *ngFor="let control of innerFormArray(i).controls; let j = index" [formControlName]="j">
<input type="text" [value]="control.value">
</div>
</div>
</div>
</div>
</form>
FormBuilder
创建一个包含 outerFormArray
的 FormGroup
。outerFormArray
包含多个 FormGroup
,每个 FormGroup
又包含一个 innerFormArray
。*ngFor
循环遍历 outerFormArray
中的每个 FormGroup
。FormGroup
内部,再次使用 *ngFor
循环遍历 innerFormArray
中的每个 FormControl
。这种结构适用于需要动态添加或删除表单字段的场景,例如:
问题: 在循环遍历时出现 undefined
或 null
值。
原因: 可能是由于表单控件尚未初始化或数据绑定不正确。
解决方法:
?.
) 来避免在模板中访问未定义的属性。<div *ngFor="let control of innerFormArray(i)?.controls; let j = index" [formControlName]="j">
<input type="text" [value]="control?.value">
</div>
通过这种方式,可以确保在表单控件未定义时不会引发错误。
希望这个示例和解释能帮助你理解如何在Angular中循环遍历嵌套的 FormArray
。如果有其他具体问题或需要进一步的帮助,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云