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.

Quellinformationen

Repository
syncfusion/angular-ui-components-skills
Letzte Quellaktivität
11. August 2026 um 05:24
Erkannte Sprache von SKILL.md
Englisch
Sterne
0
Forks
1

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
47 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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"` |
Auf GitHub ansehen
Diese SKILL.md ist sehr gross, daher zeigt SkillsMP hier nur den ersten Abschnitt. Auf GitHub ansehen