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

Angular中FormArray内beginTime控件的mat-error访问问题求助

解决Angular FormArray内表单控件的错误访问问题

你遇到的Cannot read property 'hasError' of null错误,根源是在模板里直接用workTiming.get('beginTime')尝试访问控件——FormArray本身是一组FormGroup集合,不能直接通过控件名拿到内部的beginTime,必须先定位到当前循环的那个FormGroup实例,再去获取它里面的控件。

下面给你两种可行的解决方式:

方法一:直接在模板中通过循环项访问控件

修改mat-error的判断逻辑,把workTiming.get('beginTime')替换成item.get('beginTime')。这里的item就是*ngFor循环到的当前FormGroup实例,直接调用它的get方法就能精准拿到对应的beginTime控件:

<div formArrayName="workTiming" >
  <div *ngFor="let item of workTiming.controls; let pointIndex=index" [formGroupName]="pointIndex">
    <div class="container">
      <mat-form-field class="responsive">
        <input type="time" required formControlName="beginTime" matInput placeholder="Begin Time">
        <mat-error *ngIf="item.get('beginTime').hasError('required')">
          Enter begin time
        </mat-error>
      </mat-form-field>
    </div>
  </div>
</div>

方法二:在组件中添加辅助方法(更易维护)

如果你的表单逻辑比较复杂,或者希望模板代码更简洁,可以在组件类里定义一个辅助方法,专门用来获取FormArray中指定位置的控件:

首先,确保你已经为workTiming定义了getter(方便模板直接访问):

get workTiming(): FormArray {
  return this.locationForm.get('workTiming') as FormArray;
}

然后添加获取控件的方法:

getWorkTimingControl(index: number, controlName: string): FormControl {
  return this.workTiming.at(index).get(controlName) as FormControl;
}

最后在模板里调用这个方法即可:

<div formArrayName="workTiming" >
  <div *ngFor="let item of workTiming.controls; let pointIndex=index" [formGroupName]="pointIndex">
    <div class="container">
      <mat-form-field class="responsive">
        <input type="time" required formControlName="beginTime" matInput placeholder="Begin Time">
        <mat-error *ngIf="getWorkTimingControl(pointIndex, 'beginTime').hasError('required')">
          Enter begin time
        </mat-error>
      </mat-form-field>
    </div>
  </div>
</div>

这两种方法都能正确定位到FormArray内的beginTime控件,解决你遇到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:21:16