Skip to main content

syncfusion-angular-calendars

Comprehensive guide for implementing Syncfusion Angular Calendar components including Calendar, DatePicker, DateRangePicker, DateTimePicker, and TimePicker. Covers installation, data binding, date/time selection, range selection, formatting, localization, masking, validation, customization, templates, accessibility, and controlled component patterns in Angular applications.

Datos de origen

Repositorio
syncfusion/angular-ui-components-skills
Última actividad en el origen
11 de agosto de 2026 a las 05:24
Idioma detectado de SKILL.md
inglés
Estrellas
0
Forks
1

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Explorador de archivos
47 archivos

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
syncfusion-angular-calendars
description
Comprehensive guide for implementing Syncfusion Angular Calendar components including Calendar, DatePicker, DateRangePicker, DateTimePicker, and TimePicker. Covers installation, data binding, date/time selection, range selection, formatting, localization, masking, validation, customization, templates, accessibility, and controlled component patterns in Angular applications.
metadata
{"author":"Syncfusion Inc","category":"Calendars","version":"34.1.29"}
# Implementing Syncfusion Angular Calendars ## Calendars A comprehensive guide for implementing the Syncfusion Essential JS 2 Calendar component in Angular applications. Learn to create date pickers, manage calendar views, handle events, and customize styling. ### Calendar Overview The Syncfusion Angular Calendar component is a date selection widget that provides: - **Multiple calendar views:** Month (default), Year, and Decade views with smooth navigation - **Date selection modes:** Single date or multiple dates with `isMultiSelection` property - **Navigation control:** `navigateTo()` method for programmatic view switching - **Date manipulation methods:** `addDate()` and `removeDate()` for multi-selection management - **Comprehensive event system:** change, created, navigated, renderDayCell, destroyed events - **Localization support:** Locale-specific formatting, day header formats, first day of week - **Accessibility:** Full WCAG 2.2 compliance, keyboard navigation, RTL support - **Rich customization:** CSS classes, custom rendering, day cell customization - **Persistence:** Optional state persistence across page reloads **Package:** `@syncfusion/ej2-angular-calendars` ### Documentation Navigation Read the following references based on your specific needs: #### Getting Started 📄 **Read:** [references/getting-started.md](references/calendar-getting-started.md) - Package installation and module setup - CSS theme imports and dependencies - Basic calendar implementation - Component initialization in Angular - Running and testing setup #### Calendar Views 📄 **Read:** [references/calendar-views.md](references/calendar-views.md) - Month view (default display) - Year view implementation - Decade view implementation - View navigation and transitions - `start` property usage - `depth` property for restricting views #### Date Selection 📄 **Read:** [references/date-selection.md](references/calendar-date-selection.md) - Single date selection - Multiple date selection (`isMultiSelection`) - `value` property for single dates - `values` array for multiple dates - Min/max date constraints - Date range validation #### Events & Methods 📄 **Read:** [references/events-and-methods.md](references/calendar-events-and-methods.md) - Event handlers (change, created, navigated, renderDayCell, destroyed) - `addDate()` method for multi-selection - `removeDate()` method for multi-selection - `navigateTo()` for programmatic navigation - `currentView()` to get active view - `getPersistData()` to retrieve persistence data - `destroy()` to destroy the calendar widget - RenderDayCell for custom day styling #### Calendar Navigation 📄 **Read:** [references/calendar-navigation.md](references/calendar-navigation.md) - Month navigation controls - Year and Decade view switching - Today button (`showTodayButton`) - `firstDayOfWeek` property - Week number display (`weekNumber`) - Keyboard shortcuts and navigation #### Accessibility & Globalization 📄 **Read:** [references/accessibility-and-globalization.md](references/calendar-accessibility-and-globalization.md) - WCAG 2.2 and Section 508 compliance - WAI-ARIA attributes and roles - Keyboard navigation (arrows, enter, spacebar) - Screen reader compatibility - Localization (locale property) - Day header formats (Short, Narrow, Abbreviated, Wide) - RTL (Right-to-Left) support #### Styling & Customization 📄 **Read:** [references/styling-and-customization.md](references/calendar-styling-and-customization.md) - CSS class customization (.e-calendar, .e-day-cell, .e-selected) - Theme selection (Material, Bootstrap, Tailwind, Fabric) - Dark mode implementation - Custom day cell styling via renderDayCell - Disabled dates styling - Hover and focus states #### API Reference 📄 **Read:** [references/api-reference.md](references/calendar-api-reference.md) - Complete property reference (value, values, isMultiSelection, min, max, start, depth, showTodayButton, locale, dayHeaderFormat, weekNumber, weekRule, firstDayOfWeek, cssClass, enableRtl, enabled, calendarMode, keyConfigs, enablePersistence, serverTimezoneOffset) - All method signatures with examples (addDate, removeDate, navigateTo, currentView, getPersistData, destroy) - Event argument types (ChangedEventArgs, NavigatedEventArgs, RenderDayCellEventArgs) - Key configurations for keyboard shortcuts - Calendar modes (Gregorian, Islamic) - Return types and descriptions ### Quick Start Example ```typescript // app.component.ts import { Component } from '@angular/core'; import { ChangedEventArgs } from '@syncfusion/ej2-calendars'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { // Single date selection selectedDate: Date = new Date(); // Multiple date selection selectedDates: Date[] = [ new Date(2026, 2, 15), new Date(2026, 2, 20), new Date(2026, 2, 25) ]; // Calendar configuration minDate: Date = new Date(2020, 0, 1); maxDate: Date = new Date(2030, 11, 31); // Event handler onCalendarChange(args: ChangedEventArgs): void { console.log('Selected date:', args.value); } } ``` ```html <!-- app.component.html --> <div style="padding: 20px; font-family: Arial, sans-serif;"> <h2>Single Date Selection</h2> <ejs-calendar [(ngModel)]="selectedDate" [min]="minDate" [max]="maxDate" (change)="onCalendarChange($event)"> </ejs-calendar> <p>Selected: {{ selectedDate | date:'medium' }}</p> <h2>Multiple Date Selection</h2> <ejs-calendar [(ngModel)]="selectedDates" [isMultiSelection]="true" [showTodayButton]="true"> </ejs-calendar> <p>Selected dates: {{ selectedDates.length }} dates</p> </div> ``` ```css /* app.component.css */ @import '../node_modules/@syncfusion/ej2-base/styles/material3.css'; @import '../node_modules/@syncfusion/ej2-calendars/styles/material3.css'; :host ::ng-deep .e-calendar { margin: 20px 0; } :host ::ng-deep .e-selected { background-color: #3f51b5; color: white; } ``` ### Common Patterns #### Pattern 1: Custom Date Range (Two Calendar Instances) The Calendar component does not have built-in range selection. Use two separate Calendar instances with `min`/`max` constraints and the `change` event to implement a custom date range picker: ```typescript export class AppComponent { startDate: Date = new Date(); endDate: Date = new Date(); onStartDateChange(args: ChangedEventArgs): void { this.startDate = args.value; // Ensure end date is not before start date if (this.endDate < this.startDate) { this.endDate = this.startDate; } } onEndDateChange(args: ChangedEventArgs): void { this.endDate = args.value; } getDaysInRange(): number { const timeDiff = this.endDate.getTime() - this.startDate.getTime(); return Math.ceil(timeDiff / (1000 * 3600 * 24)) + 1; } } ``` ```html <!-- Two separate Calendar instances for range selection --> <ejs-calendar [(ngModel)]="startDate" (change)="onStartDateChange($event)"></ejs-calendar> <ejs-calendar [(ngModel)]="endDate" [min]="startDate" (change)="onEndDateChange($event)"></ejs-calendar> ``` #### Pattern 2: Calendar with Disabled Dates Disable specific dates (weekends, holidays) using renderDayCell event: ```typescript export class AppComponent { holidays: Date[] = [ new Date(2026, 11, 25), // Christmas new Date(2026, 0, 1), // New Year ]; onRenderDayCell(args: RenderDayCellEventArgs): void { // Disable weekends if (args.date.getDay() === 0 || args.date.getDay() === 6) { args.isDisabled = true; } // Disable holidays if (this.isHoliday(args.date)) { args.isDisabled = true; } } private isHoliday(date: Date): boolean { return this.holidays.some(holiday => holiday.toDateString() === date.toDateString() ); } } ``` #### Pattern 3: Multi-Selection with Add/Remove Manage multiple selected dates programmatically: ```typescript export class AppComponent { @ViewChild('calendar') calendarRef!: CalendarComponent; selectedDates: Date[] = []; addDateToSelection(date: Date): void { // Check if already selected if (!this.selectedDates.some(d => d.toDateString() === date.toDateString())) { this.calendarRef.addDate(date); } } removeDateFromSelection(date: Date): void { this.calendarRef.removeDate(date); } clearAllDates(): void { if (this.selectedDates.length > 0) { this.calendarRef.removeDate(this.selectedDates); } } } ``` #### Pattern 4: Year/Decade View Navigation Implement navigation to different calendar views: ```typescript export class AppComponent { @ViewChild('calendar') calendarRef!: CalendarComponent; navigateToYear(year: number): void { const dateInYear = new Date(year, 0, 1); this.calendarRef.navigateTo('Year', dateInYear); } navigateToDecade(startYear: number): void { const dateInDecade = new Date(startYear, 0, 1); this.calendarRef.navigateTo('Decade', dateInDecade); } getCurrentView(): string { return this.calendarRef.currentView(); } } ``` #### Pattern 5: Reactive Form Integration Integrate Calendar with Angular Reactive Forms: ```typescript export class AppComponent implements OnInit { dateForm: FormGroup; constructor(private fb: FormBuilder) { this.dateForm = this.fb.group({ eventDate: [new Date(), Validators.required], eventName: ['', Validators.required] }); } ngOnInit(): void { // Subscribe to date changes this.dateForm.get('eventDate')?.valueChanges.subscribe(date => { console.log('Event date changed:', date); }); } submitForm(): void { if (this.dateForm.valid) { console.log('Form values:', this.dateForm.value); } } } ``` ```html <form [formGroup]="dateForm" (ngSubmit)="submitForm()"> <div> <label for="eventDate">Event Date:</label> <ejs-calendar id="eventDate" formControlName="eventDate"> </ejs-calendar> </div> <div> <label for="eventName">Event Name:</label> <input id="eventName" type="text" formControlName="eventName"> </div> <button type="submit" [disabled]="!dateForm.valid">Submit</button> </form> ``` ### Key Props Reference | Prop | Type | Description | Example | |------|------|-------------|---------| | `value` | `Date` | Single selected date | `[value]="selectedDate"` | | `values` | `Date[]` | Multiple selected dates | `[values]="selectedDates"` | | `isMultiSelection` | `boolean` | Enable multiple date selection | `[isMultiSelection]="true"` | | `min` | `Date` | Minimum selectable date | `[min]="minDate"` | | `max` | `Date` | Maximum selectable date | `[max]="maxDate"` | | `start` | `CalendarView` | Initial view (Month/Year/Decade) | `start="Month"` | | `depth` | `CalendarView` | Maximum view level | `depth="Month"` | | `showTodayButton` | `boolean` | Display today button | `[showTodayButton]="true"` | | `locale` | `string` | Culture/language code | `locale="fr-FR"` | | `dayHeaderFormat` | `DayHeaderFormats` | Day format (Short/Narrow/Abbreviated/Wide) | `dayHeaderFormat="Abbreviated"` | | `weekNumber` | `boolean` | Show week numbers | `[weekNumber]="true"` | | `weekRule` | `WeekRule` | Rule for first week of year (FirstDay/FirstFullWeek/FirstFourDayWeek) | `weekRule="FirstFourDayWeek"` |
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub