mcpField
S
syncfusion-angular-datepicker

syncfusion-angular-datepicker

github.com/syncfusion开发0127 次安装1 周前更新
代码仓库

关于 syncfusion-angular-datepicker

syncfusion-angular-datepicker 是面向 Angular 开发者的 Syncfusion DatePicker 实现指南,介绍日历弹窗与文本输入的单日期选择。它涵盖格式、校验、输入遮罩、表单集成及国际化。

主要功能

  1. 01日历或文本输入选择日期
  2. 02自定义格式与文化感知解析
  3. 03最小和最大日期校验
  4. 04输入遮罩和多级日历视图
  5. 05Reactive Forms 与表单验证集成
  6. 06键盘、屏幕阅读器和 RTL 支持

适用场景

  1. 01在预约表单中选择日期并进行校验
  2. 02为航班或酒店预订限制可选日期
  3. 03在表单中输入生日或证件到期日
  4. 04为多语言应用配置本地日期格式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/syncfusion/angular-ui-components-skills --skill syncfusion-angular-datepicker

安装后在 Claude Code 中输入/syncfusion-angular-datepicker确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
accessibility-and-forms.md
advanced-patterns.md
date-formats-and-parsing.md
date-range-and-validation.md
date-views-and-navigation.md
getting-started.md
globalization-and-localization.md
masking-and-editing.md
styling-and-customization.md
testing-guide.md

详细介绍

实现 Syncfusion Angular DatePicker

Syncfusion Angular DatePicker 提供易于使用的日历界面,用于选择单个日期,并支持格式设置、验证、日期范围以及完整的无障碍功能(WCAG 2.2)。本技能将引导你了解所有必需的实现模式和高级功能。

组件概览

DatePicker 将文本输入框与弹出式日历选择器结合起来。用户可以直接输入日期,也可以使用日历进行选择。主要功能包括:

  • 日期选择:通过日历 UI 或文本输入
  • 多种日期格式(适配区域设置、自定义模式)
  • 日期范围验证(最小值/最大值、严格模式)
  • 输入掩码:引导日期输入
  • 多种日历视图(月份 → 年份 → 十年导航)
  • 无障碍功能(WCAG 2.2、ARIA、键盘支持、RTL)
  • 国际化(CLDR 数据、100 多种区域设置)
  • 表单集成(FormValidator、响应式表单、模板驱动表单)

文档与导航指南

入门

📄 阅读: references/getting-started.md

  • Angular 21+ 独立架构的安装与设置
  • 包依赖项和导入
  • DatePicker 基本实现
  • CSS 主题导入
  • 最简可运行示例
日期格式与解析

📄 阅读: references/date-formats-and-parsing.md

  • 标准日期格式模式(yyyy-MM-dd、dd/MM/yyyy 等)
  • 区域设置专用的默认格式
  • 创建自定义日期格式
  • parseDate 和 formatDate 方法
  • 动态切换格式
日期范围与验证

📄 阅读: references/date-range-and-validation.md

  • 设置日期范围限制(min/max 属性)
  • 超出范围日期的处理与错误状态
  • 空日期验证和 strictMode
  • 无效日期检测
  • 实际日期限制模式
日期视图与导航

📄 阅读: references/date-views-and-navigation.md

  • 配置起始视图(月/年/十年)
  • 深度视图限制,以限制选择范围
  • 在日历视图之间导航
  • 月份和年份选择模式
  • 不同视图配置的使用场景
掩码与编辑

📄 阅读: references/masking-and-editing.md

  • 启用日期输入掩码,引导用户输入
  • 根据日期格式设置掩码模式
  • 掩码输入中的键盘导航(上/下/左/右箭头键)
  • 自定义掩码占位符
  • 适配区域设置的掩码占位文本
样式与自定义

📄 阅读: references/styling-and-customization.md

  • 自定义包装器和输入元素的 CSS
  • DatePicker 图标的样式与自定义
  • 移动设备上的全屏模式
  • 自定义占位符和只读状态
  • 暗色模式与 Theme Studio 集成
无障碍功能与表单

📄 阅读: references/accessibility-and-forms.md

  • 符合 WCAG 2.2 和无障碍标准
  • ARIA 属性(aria-expanded、aria-disabled、aria-activedescendant)
  • 键盘导航支持(方向键、Enter、Escape)
  • 屏幕阅读器支持与语义标记
  • 集成 FormValidator 以验证日期
  • 响应式表单和模板驱动表单模式
  • 自定义验证规则
全球化与本地化

📄 阅读: references/globalization-and-localization.md

  • 加载 CLDR 数据以支持特定区域设置的格式
  • 适配区域设置的日期解析与格式设置
  • 区域设置配置与 L10n 设置
  • 根据区域设置确定一周的第一天(week 数据)
  • 从右向左(RTL)语言支持
  • 多语言示例
  • 时区感知的日期处理
测试与质量保证

📄 阅读: references/testing-guide.md

  • 使用 Jasmine/Karma 进行单元测试:解析、验证器、事件
  • 使用 Cypress 进行端到端测试:日历交互、表单流程
  • 使用 axe-core 进行无障碍测试,并检查键盘导航
高级模式

📄 阅读: references/advanced-patterns.md

  • 级联日期选择器(依赖可用性)
  • 由业务逻辑驱动的动态日期范围
  • 屏蔽日期/不可用日期及重复日期处理
  • 针对高级场景的测试与验证模式

快速入门示例

在 Angular 21+ 独立组件中实现基本的 DatePicker:

import { Component } from '@angular/core';
import { DatePickerModule } from '@syncfusion/ej2-angular-calendars';

@Component({
  selector: 'app-datepicker-demo',
  standalone: true,
  imports: [DatePickerModule],
  template: `
    <ejs-datepicker
      placeholder="Select date"
      [(ngModel)]="selectedDate"
      (change)="onDateChange($event)">
    </ejs-datepicker>
    <p>Selected: {{ selectedDate | date:'fullDate' }}</p>
  `
})
export class DatePickerDemoComponent {
  selectedDate: Date | null = null;

  onDateChange(event: any) {
    console.log('Date changed:', event.value);
  }
}

设置步骤:

  1. 安装 @syncfusion/ej2-angular-calendars 包
  2. 在组件中导入 DatePickerModule
  3. 添加带属性的 <ejs-datepicker> 元素
  4. 使用 [(ngModel)](双向绑定)绑定到组件变量

运行效果:

  • DatePicker 会显示日历图标
  • 点击即可打开弹出式日历
  • 从日历中选择日期,或直接输入
  • 所选日期会更新组件变量
  • 选择日期时会触发 change 事件

常见模式

1. 日期范围验证

限制用户只能选择特定开始日期和结束日期之间的日期:

minDate = new Date(2024, 0, 1);  // Jan 1, 2024
maxDate = new Date(2024, 11, 31); // Dec 31, 2024
<ejs-datepicker
  [min]="minDate"
  [max]="maxDate"
  placeholder="Select date in 2024">
</ejs-datepicker>

**适用场景:**机票预订、酒店预订、预约安排

2. 自定义日期格式

以应用专属格式显示日期:

dateFormat = 'dd/MM/yyyy';  // European format
<ejs-datepicker
  [format]="dateFormat"
  placeholder="DD/MM/YYYY">
</ejs-datepicker>
3. 带掩码的日期输入

通过可视化掩码和方向键导航引导用户:

<ejs-datepicker
  [enableMask]="true"
  [maskPlaceholder]="'day'"
  format="dd/MM/yyyy">
</ejs-datepicker>

**键盘导航:**按向上/向下方向键可递增/递减各部分,按向左/向右方向键可在各部分之间导航

4. 日期范围选择(带最小值/最大值)

在预订场景中禁止选择过去的日期:

minDate = new Date(); // Today
maxDate: Date;

constructor() {
  // Set max to 90 days from today
  this.maxDate = new Date();
  this.maxDate.setDate(this.maxDate.getDate() + 90);
}
5. 响应式表单集成

带响应式表单验证的 DatePicker:

import { ReactiveFormsModule, FormBuilder, Validators } from '@angular/forms';

export class FormComponent {
  form = this.fb.group({
    birthDate: [null, [Validators.required]],
  });

  constructor(private fb: FormBuilder) {}
}
<form [formGroup]="form">
  <ejs-datepicker
    formControlName="birthDate"
    placeholder="Birth date">
  </ejs-datepicker>
  <span *ngIf="form.get('birthDate')?.hasError('required')">
    Birth date is required
  </span>
</form>

API 参考(属性、方法、事件)

属性
属性类型说明
allowEditboolean文本框是否可编辑(默认为 true)
calendarModeCalendarType日历类型(例如,公历、伊斯兰历)
cssClassstring用于自定义样式的根 CSS 类
dayHeaderFormatDayHeaderFormats星期标题格式(Short/Narrow/Abbreviated/Wide)
depthCalendarView允许的最深日历视图(Month/Year/Decade)
enableMaskboolean启用带掩码的日期输入
enablePersistenceboolean在重新加载之间保留组件状态
enableRtlboolean启用从右到左的渲染
enabledboolean启用或禁用组件(设置为 false 可禁用)
firstDayOfWeeknumber每周的第一天(0-6)
floatLabelTypeFloatLabelTypestring
formatstring|FormatObject值的显示格式
fullScreenModeboolean移动设备上的弹出窗口全屏模式
htmlAttributes{ [key:string]: string }根元素的其他 HTML 属性
inputFormatsstring[]|FormatObject[]可接受的解析输入格式
keyConfigs{ [key:string]: string }自定义按键操作映射
localestring覆盖全局区域设置(例如,'en-US')
maskPlaceholderMaskPlaceholderModel带掩码输入的占位符文本
maxDate可选日期的最大值
minDate可选日期的最小值
openOnFocusboolean输入框获得焦点时打开弹出窗口
placeholderstring输入框占位符文本
readonlyboolean将输入框设为只读(不可输入)
serverTimezoneOffsetnumber服务器时区偏移量(分钟,可选)
showClearButtonboolean显示/隐藏清除图标
showTodayButtonboolean显示/隐藏弹出窗口中的“今天”按钮
startCalendarView弹出窗口打开时的初始视图
strictModeboolean强制严格解析/验证
valueDate选中的日期值
weekNumberboolean在日历中显示周数
weekRuleWeekRule一年中第一周的规则
widthnumber|string组件宽度
zIndexnumber弹出窗口的 Z-index
方法
  • currentView() — 返回当前日历视图名称
  • destroy() — 销毁组件实例
  • focusIn() — 聚焦输入框
  • focusOut() — 使输入框失去焦点
  • getPersistData() — 返回持久化属性字符串
  • hide() — 隐藏日历弹出窗口
  • navigateTo(view: CalendarView, date?: Date) — 导航到指定视图/日期
  • removeDate(dates: Date|Date[]) — 从值中移除日期
  • show() — 显示日历弹出窗口
事件
  • blur — 输入框失去焦点时触发
  • change — 值更改时触发(提供 ChangedEventArgs)
  • cleared — 使用清除按钮时触发
  • close — 弹出窗口关闭时触发(可阻止)
  • created — 组件创建生命周期事件
  • destroyed — 组件销毁生命周期事件
  • focus — 输入框获得焦点时触发
  • navigated — 日历导航到其他视图时触发
  • open — 弹出窗口打开时触发(可阻止)
  • renderDayCell — 每个日期单元格渲染时触发(可用于禁用/自定义单元格)

常见用例

  1. 生日/出生日期选择: 最小值/最大值验证、掩码输入、以十年为起始范围的视图,便于快速选择年份
  2. 会议安排: 日期范围(今天起 90 天内)、自定义工作日验证、表单集成
  3. 酒店/机票预订: 最小值/最大值日期、双向日期绑定、带验证的响应式表单
  4. 申请表单: 出生日期、许可证到期日期、符合无障碍要求的预约日期
  5. 国际申请: 区域设置感知的格式化、RTL 支持、特定文化的日历

后续步骤:

  • 根据用例阅读相关参考文件
  • 如果要构建面向公众的应用,请检查无障碍要求
  • 如果需要无障碍支持,请测试键盘导航
  • 如果要支持多种文化,请设置 CLDR 本地化

评论

支持 Markdown