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

如何为Formly自定义日历组件添加校验规则与错误提示

问题解决方法

1. 核心错误原因

自定义日历组件中p-calendar绑定的表单控件对象错误,且没有添加错误提示的渲染逻辑,导致校验规则无法关联到组件,也不会展示错误信息。

2. 分步修改代码

修改 calendario.html

首先修正表单控件绑定,同时添加错误样式判断和错误提示渲染逻辑:

<div class="p-field p-col-12 p-md-4" [ngClass]="{'ng-invalid ng-dirty ng-touched': field.invalid && (field.dirty || field.touched)}">
    <label [for]="field.id">{{ to.label }}</label>
    <p-calendar  
      [formControl]="formControl"  
      firstDayOfWeek="1" 
      dateFormat="dd/mm/yy" 
      [inputId]="field.id"
      [placeholder]="to.placeholder"
      [formlyAttributes]="field"
    ></p-calendar>
    <!-- 错误提示渲染 -->
    <small *ngIf="field.invalid && (field.dirty || field.touched)" class="p-error">
      <formly-validation-message [field]="field"></formly-validation-message>
    </small>
</div>

calendario.ts 无需额外修改,现有代码已经正确继承了FieldType基类。

(可选)全局统一必填提示配置

如果需要全局统一默认的校验提示,可以修改app.module.ts中的FormlyModule配置:

FormlyModule.forRoot({ 
  extras: { lazyRender: true }, 
  types: [
    { name: 'calendario', component: CalendarioComponent },
  ],
  // 全局校验消息配置
  validationMessages: [
    { name: 'required', message: '该字段为必填项' },
  ]
}),
CalendarModule,

3. 校验逻辑说明

你在app.component.ts中给字段配置的required: true和自定义validation.messages规则是正确的,完成上述修改后:

  • 日期为空且字段被触碰/修改时,会自动触发必填校验,展示你配置的La fecha es necesaria错误提示
  • 外层容器会自动添加PrimeNG的错误样式,触发对应UI变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 00:15:05