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

Angular12如何在HTML模板中显示formControlName对应的值

问题原因
  • 执行{{bill.get('heads')}}输出[object Object],是因为AbstractControl.get()方法返回的是FormControl实例对象本身,而非控件绑定的值,直接插值会调用对象的toString方法,所以输出该结果。
  • 编译时报空值错误,是Angular 12默认开启的严格模板类型检查导致的:get()方法的返回类型是AbstractControl | null,TS会判定直接访问.value存在空指针风险。
可行解决方案

方案1:使用可选链操作符(推荐,代码最简)

直接在模板中用?.安全访问,空值场景下会自动返回undefined,不会触发编译错误也不会运行时报错:

{{ bill.get('heads')?.value }}

如果需要空值时显示默认占位符,可以搭配空值合并运算符:

{{ bill.get('heads')?.value ?? '--' }}

方案2:直接访问FormGroup的value属性

循环中的bill本身是FormGroup实例,可以直接读取它的value对象下的对应字段,同样建议加可选链适配严格检查:

{{ bill.value?.heads }}

改后完整HTML示例

<div formArrayName="billings" *ngFor="let bill of billings.controls;  let i = index;">
    <div [formGroupName]="i">
      <div>
        <tr>
          <td>
            <!-- 直接输出heads控件的值 -->
            {{ bill.get('heads')?.value }}
            <input class="form-control" type="text" formControlName="heads">
          </td>
          <td>
            <input class="form-control" type="number" step=".01" formControlName="amount">
          </td>
        </tr>
      </div>
    </div>
  </div>
</form>
补充说明

input绑定formControlName="heads"能正常工作,是因为Angular的FormControlName指令内部已经封装了空值安全校验、控件取值赋值的逻辑,不需要开发者额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:24:02