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

Angular动态Kendo Grid表单校验无法读取undefined的errors属性求助

问题修复方案

报错原因分析

两个报错分别对应两个代码问题:

  • Cannot find control with unspecified name attribute:输入框同时绑定了[formControlName]和[formControl]两个冲突的表单指令,且[formControlName]绑定的变量不存在
  • Cannot read properties of undefined (reading 'errors'):你的全局formGroups结构是{ items: FormArray },get f()返回的formGroups.controls只有items属性,不存在attributeDisplayName属性,读取自然返回undefined

具体修改步骤

1. 修改HTML模板代码

找到attributeDisplayName列的编辑模板部分,做两处修改:

<kendo-grid-column field="attributeDisplayName" title="CUSTOM FIELD LABEL" width="190">      
    <ng-template kendoGridEditTemplate let-column="column" let-formGroup="formGroup" >          
      <!-- 删除多余的[formControlName]="attributeDisplayName"属性,避免指令冲突 -->
      <input #input (valueChange)="onValueChange()" ngDefaultControl  class="k-textbox" [formControl]="formGroup.get(column.field)">
      <!-- 校验提示直接从当前行的formGroup取控件,加可选链避免空值报错 -->
      <div *ngIf="formGroup.get('attributeDisplayName')?.errors" class="k-tooltip-validation">
        <div *ngIf="formGroup.get('attributeDisplayName')?.errors?.required">This is required</div>
      </div>
    </ng-template>        
</kendo-grid-column>

2. 可选优化TS代码

editRows方法每次调用前先清空FormArray,避免多次点击编辑重复堆积表单控件:

public editRows(grid: GridComponent) {
  this.isEdited = true;
  // 先清空现有表单数组
  (this.formGroups.get('items') as FormArray).clear();
  let currentRow = 0;
  let rows: any = this.gridData.data;  
  for (let i = 0; i < rows.length; i++) {
    const formGroup = this.createFormGroup(rows[i]);
    (this.formGroups.get('items') as FormArray).push(formGroup);        
    grid.editRow(currentRow, formGroup, {skipFocus: true});
    currentRow++;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:07