Angular Integration Guide
Complete guide for integrating FlexiDatepicker into your Angular applications
Installation
Install the package via npm, yarn, or pnpm
npm install flexidatepickerBasic Component
Angular component with lifecycle hooks
import { Component, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';
import FlexiDatepicker from 'flexidatepicker';
import 'flexidatepicker/dist/flexidatepicker.min.css';
@Component({
selector: 'app-date-picker',
template: '<input #dateInput type="text" readonly placeholder="Select date" />'
})
export class DatePickerComponent implements AfterViewInit, OnDestroy {
@ViewChild('dateInput') dateInput!: ElementRef<HTMLInputElement>;
private picker: FlexiDatepicker | null = null;
ngAfterViewInit() {
this.picker = new FlexiDatepicker(this.dateInput.nativeElement, {
mode: 'range',
dateFormat: 'MMM d, yyyy',
onSelectionChange: (data) => {
console.log('Selected:', data);
}
});
}
ngOnDestroy() {
this.picker = null;
}
}CSS Configuration
Add FlexiDatepicker CSS to angular.json
/* angular.json */
{
"projects": {
"your-app": {
"architect": {
"build": {
"options": {
"styles": [
"src/styles.css",
"node_modules/flexidatepicker/dist/flexidatepicker.min.css"
]
}
}
}
}
}
}Reusable Component
Full-featured reusable DatePicker component
// date-picker.component.ts
import {
Component,
ElementRef,
ViewChild,
AfterViewInit,
OnDestroy,
Input,
Output,
EventEmitter
} from '@angular/core';
import FlexiDatepicker, { FlexiDatepickerOptions } from 'flexidatepicker';
@Component({
selector: 'app-date-picker',
template: `
<input
#dateInput
type="text"
readonly
[placeholder]="placeholder"
[class]="inputClass"
/>
`,
styleUrls: ['./date-picker.component.css']
})
export class DatePickerComponent implements AfterViewInit, OnDestroy {
@ViewChild('dateInput') dateInput!: ElementRef<HTMLInputElement>;
@Input() mode: 'single' | 'multiple' | 'range' | 'multi-range' = 'single';
@Input() placeholder: string = 'Select date';
@Input() inputClass: string = '';
@Input() options: Partial<FlexiDatepickerOptions> = {};
@Output() dateChange = new EventEmitter();
private picker: FlexiDatepicker | null = null;
ngAfterViewInit() {
this.picker = new FlexiDatepicker(this.dateInput.nativeElement, {
mode: this.mode,
...this.options,
onSelectionChange: (data) => {
this.dateChange.emit(data);
}
});
}
ngOnDestroy() {
this.picker = null;
}
}
// Usage in template
<app-date-picker
mode="range"
placeholder="Select date range"
(dateChange)="handleDateChange($event)"
[options]="{ dualCalendar: true, dateFormat: 'MMM d, yyyy' }"
>
</app-date-picker>Best Practices
- ViewChild: Use @ViewChild to access template references
- Lifecycle hooks: Initialize in ngAfterViewInit, cleanup in ngOnDestroy
- CSS Import: Add CSS to angular.json for global availability
- EventEmitter: Use @Output and EventEmitter for parent communication
Ready to get started?
FlexiDatepicker is free, open-source, and ready to use in your projects.