Présentation de la Bibliothèque
ng2-date-picker est un comopsant d'interface utilisateur avancé et hautement configurable, spécialement conçu pour les applications Angular modernes. Compatible avec les versions récentes du framework (Angular 15 et supérieures), il permet aux développeurs d'adapter finement le comportement et l'apparence du calendrier via un objet de configuration, répondant ainsi à des besoins métier complexes.
Initialisation et Configuration du Projet
Isntallation des Dépendances
Intégrez la bibliothèque dans votre espace de travail via le gestionnaire de paquets npm :
npm install ng2-date-picker --save
Importation du Module
Déclarez le module du sélecteur de date dans votre module racine ou feature module :
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { DpDatePickerModule } from 'ng2-date-picker';
import { FormsModule } from '@angular/forms';
import { PlanningComponent } from './planning.component';
@NgModule({
declarations: [PlanningComponent],
imports: [
BrowserModule,
FormsModule,
DpDatePickerModule
],
bootstrap: [PlanningComponent]
})
export class AppModule { }
Intégration des Styles Globaux
Le composant nécessite les styles de superposition (overlay) de l'Angular CDK. Vous pouvez les importer dans votre fichier de styles global (styles.css ou styles.scss) :
@import '~@angular/cdk/overlay-prebuilt.css';
Ou les référencer directement dans le fichier angular.json :
"styles": [
"node_modules/@angular/cdk/overlay-prebuilt.css",
"src/styles.css"
]
Utilisation dans le Template
Insérez le sélecteur dans votre composant HTML en liant les données et les options :
<dp-date-picker
[(ngModel)]="targetDate"
[config]="calendarSettings"
placeholder="Sélectionnez une échéance">
</dp-date-picker>
Définition des Options
Personnalisez le comportement dans la classe TypeScript du composant :
calendarSettings = {
format: 'YYYY/MM/DD',
disableKeypress: true,
closeOnSelect: false,
showNearMonthDays: true,
min: new Date(2023, 0, 1)
};
Scénarios d'Utilisation et Bonnes Pratiques
Formulaire de Réservation Standard
Intégrez le sélecteur dans un formulaire template-driven avec une validation de base :
<form #bookingForm="ngForm" (ngSubmit)="confirmBooking(bookingForm)">
<dp-date-picker
name="departureDate"
[(ngModel)]="departureDate"
[config]="calendarSettings"
required>
</dp-date-picker>
<button type="submit" [disabled]="bookingForm.invalid">
Confirmer la réservation
</button>
</form>
Sélection de Dates Multiples
Pour permettre à l'utilisateur de choisir plusieurs jours (par exemple, pour définir des jours de disponibilité), activez l'option correspondante :
availabilityConfig = {
allowMultiSelect: true,
format: 'DD-MM-YYYY',
closeOnSelect: false
};
Recommandations d'Implémentation
- Localisation (i18n) : Configurez les locales pour traduire automatiquement les libellés des mois et des jours de la semaine selon la région de l'utilisateur.
- Thématisation Avancée : Utilisez les variables CSS exposées par la bibliothèque ou l'attribut
themepour aligner parfaitement le calendrier avec votre charte graphique. - Gestion des Événements : Abonnez-vous aux émetteurs comme
(onLeftNav)ou(onChange)pour déclencher des requêtes API ou des calculs dynamiques lors de la navigation ou de la sélection.
Intégrations Écosystémiques
Angular Material
Bien que possédant son propre style, le composant peut être harmonisé avec Angular Material. L'application de thèmes Material via les variables CSS permet de maintenir une cohérence visuelle stricte au sein de l'interface utilisateur.
Manipulation Temporelle avec Day.js
La bibliothèque s'appuie sur des parseurs légers et performants pour la gestion des formats. L'utilisation de Day.js en arrière-plan garantit des opérations de formatage, de parsing et de manipulation de dates rapides et immuables, extensibles via son système de plugins.
Formulaires Réactifs (Reactive Forms)
Le sélecteur est entièrement compatible avec l'API ReactiveFormsModule. Il peut être lié à un FormControl, permettant ainsi d'appliquer des validateurs synchrones et asynchrones complexes, ainsi qu'une gestion fine de l'état du formulaire (pristine, dirty, touched).