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

Angular表单submitted属性报错:需用['submitted']访问的解决方法

Angular表单submitted属性报错修复方案

问题说明

在Angular表单中通过检查submitted状态实现错误反馈时,出现以下报错:

Property 'submitted' comes from an index signature, so it must be accessed with ['submitted'].

相关代码

HTML模板代码

<form #clientRequestForm [formGroup]="clientRequestForm" (ngSubmit)="newClientRequest()">
<div class="mb-3">
  <label class="form-label" for="username"
    >Username</label
  >
  <input
    type="text"
    class="form-control"
    id="email"
    formControlName="username"
    placeholder="Enter username"
    [class.is-invalid]="clientRequestForm.submitted && clientRequestForm.get('username')?.invalid"
  />
  <div class="invalid-feedback">
    <div>Username is required</div>
    
  </div>
</div>

<div class="mb-3">
  <label class="form-label" for="password">Item Type</label>
  <select name="" formControlName="itemid" class="form-select" id="" [class.is-invalid]="clientRequestForm.submitted&& clientRequestForm.get('itemId')?.invalid">
    <option value="{{item.itemid}}" *ngFor="let item of clientItems">{{item.itemname}}</option>
  </select>
  <div class="invalid-feedback">
    <div>Item is required</div>
    
  </div>
</div>
<div class="mt-5">
    <button type="submit" class="btn btn-success btn-load w-100" type="submit" [disabled]="loading">
        <span class="d-flex align-items-center">
            <span class="flex-grow-1 me-2"> {{CheckingText}} </span>
            <span
            *ngIf="loading"
            class="spinner-border flex-shrink-0"
            role="status"
            >
            </span>
        </span>
    </button>
</div>
</form>

组件TS代码

clientRequestForm= new FormGroup({
    username: new FormControl(null, Validators.required),
    itemid: new FormControl(null, Validators.required)
  }, {updateOn : 'submit'})

修复方案

方案1:按报错提示修改属性访问方式

直接将模板中所有的clientRequestForm.submitted改为clientRequestForm['submitted'],示例:

[class.is-invalid]="clientRequestForm['submitted'] && clientRequestForm.get('username')?.invalid"

方案2:解决变量名冲突(推荐)

当前模板的引用变量#clientRequestForm和组件中的表单实例变量重名,导致类型推断异常。修改模板引用变量名称,比如改为#formRef:

<form #formRef [formGroup]="clientRequestForm" (ngSubmit)="newClientRequest()">

之后判断状态时使用新的引用变量:

[class.is-invalid]="formRef.submitted && clientRequestForm.get('username')?.invalid"

额外修正

注意到select控件的有效性判断中,clientRequestForm.get('itemId')存在拼写错误,组件中表单控件名为itemid(小写d),需修正为:

clientRequestForm.get('itemid')?.invalid

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:48