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

Angular动态生成表单控件时formControlName未渲染致mat-datepicker弹窗失效

问题原因及修复方案
  • 模板变量与循环索引重名冲突:*ngFor 中声明的索引变量 i 与 mat-datepicker 的模板引用变量 #i 重名,导致 input 和 toggle 绑定的 [matDatepicker]、[for] 属性指向了数字类型的索引值,而非日期选择器实例,因此无法触发弹窗。
  • formControlName 绑定写法不规范:文本输入框使用 formControlName="{{item.key}}" 插值写法,动态绑定时可能出现失效问题,需统一改为方括号属性绑定写法。
  • 前置依赖校验:需确保外层 form 标签已正确绑定 [formGroup] 到组件内声明的 FormGroup 实例,且所有 item.key 对应的 FormControl 已提前在 FormGroup 中初始化,否则 formControlName 无法正常关联。
修正后代码示例
<!-- 替换yourFormGroup为你组件内实际的FormGroup变量名 -->
<form [formGroup]="yourFormGroup">
  <div *ngFor="let item of list; let i=index;">
    <mat-form-field appearance="fill">
      <mat-label>{{item.control["Caption"]}}</mat-label>

      <input *ngIf="item.control['Type'] == 'Text'" matInput [formControlName]="item.key" >
      
      <input *ngIf="item.control['Type'] == 'Date'" matInput [matDatepicker]="datePicker" placeholder="DD/MM/YYYY" [formControlName]="item.key"  >
      <mat-datepicker-toggle *ngIf="item.control['Type'] == 'Date'" matSuffix [for]="datePicker"></mat-datepicker-toggle>
      <mat-datepicker *ngIf="item.control['Type'] == 'Date'" #datePicker></mat-datepicker>

    </mat-form-field>
  </div>
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:18:02