You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含嵌套FormGroup的FormArray:如何访问嵌套表单组控件?

解决FormArray中FormGroup控件的绑定问题

首先你得先修正表单初始化的错误——formBuilder.array()接收的是控件数组,不是键值对对象,你现在的写法会导致FormArray结构异常,无法正确绑定。

修正后的TS代码

表单初始化

this.form = this.formBuilder.group({
  // 保留你的其他控件
  properties: this.formBuilder.array([
    this.formBuilder.group({ 
      label: new UntypedFormControl(),
      value: new UntypedFormControl(),
    }),
    this.formBuilder.group({ 
      label: new UntypedFormControl(),
      value: new UntypedFormControl(),
    }),
    this.formBuilder.group({ 
      label: new UntypedFormControl(),
      value: new UntypedFormControl(),
    }),
  ])
});

Getter方法(无需修改)

get properties() {
  return this.form.controls.properties as FormArray;
}

HTML模板绑定

在[formGroupName]="i"的容器内,直接通过formControlName指定控件名label和value即可,因为每个FormGroup的控件结构是统一的:

<div formArrayName="properties">
  <ng-container *ngFor="let propGroup of properties.controls; let i = index">
    <div [formGroupName]="i">
      <!-- 每组的label和value输入框 -->
      <mat-form-field>
        <input matInput formControlName="label" placeholder="标签">
      </mat-form-field>
      <mat-form-field>
        <input matInput formControlName="value" placeholder="值">
      </mat-form-field>

      <!-- 如果需要区分三组(比如不同占位符),可通过index判断 -->
      <!-- 示例:针对第一组单独设置 -->
      <!-- <mat-form-field *ngIf="i === 0">
        <input matInput formControlName="label" placeholder="第一组标签">
      </mat-form-field> -->
    </div>
  </ng-container>
</div>

额外说明

如果业务需要给每个FormGroup设置标识(比如first/second/third),可以在FormGroup内新增name控件存储标识,不要把它作为FormArray的键——因为FormArray本质是有序集合,不支持键值对结构。

内容的提问来源于stack exchange,提问作者tony nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:50:15