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

Angular11动态表单报错control.registerOnChange is not a function如何解决

Angular 11动态表单control.registerOnChange is not a function报错解决方案

报错原因

该错误是表单控件类型不匹配导致的:
你的referentials FormArray中存储的每一项都是FormGroup实例(包含value、libelle等6个FormControl子控件),但模板中直接将循环索引i作为formControlName绑定给input,相当于把FormGroup实例当成FormControl绑定到输入框。只有FormControl实例存在registerOnChange方法,Angular调用该方法时找不到对应实现就抛出了错误。

解决方法

修正HTML模板的表单绑定逻辑,给每个循环项绑定对应FormGroup的上下文,再绑定FormGroup内的具体字段即可:

<tbody formArrayName="referentials">
  <tr 
    *ngFor="let referential of referentialArray.controls; let i = index"
    <!-- 绑定当前行对应索引的FormGroup上下文 -->
    [formGroupName]="i"
  >
    <!-- formControlName对应FormGroup内声明的字段名 -->
    <td><input type="text" formControlName="value"></td>
    <td><input type="text" formControlName="libelle"></td>
    <!-- 其余primaryColor、secondaryColor等字段按需求同理绑定 -->
  </tr>
</tbody>

补充注意事项

由于你调用了this.form.disable()将整个表单置为禁用状态,若要获取表单全量值,不要使用this.form.value(该属性不会返回禁用控件的值),请使用this.form.getRawValue()获取所有控件的数值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:30:04