J'utilise le datepicker ( ng-boostrap ) dans un popup et je voudrais changer le format de date en dd-mm-yyyy
.
Il semble que cela puisse être résolu en implémentant un nouveau NgbDateParserFormatter
pour remplacer le _ par défaut NgbDateISOParserFormatter
.
Mais je me demandais s'il y avait un autre moyen.
UPDATE:
Une petite implémentation de NgbDateParserFormatter
avec Moment.js (testé avec la version 1.0.0-alpha.14 de ng-bootstrap):
import {NgbDateParserFormatter, NgbDateStruct} from '@ng-bootstrap/ng-bootstrap';
import * as moment from 'moment';
export class NgbDateMomentParserFormatter extends NgbDateParserFormatter {
constructor(private momentFormat: string) {
super();
};
format(date: NgbDateStruct): string {
if (date === null) {
return '';
}
let d = moment({ year: date.year,
month: date.month - 1,
date: date.day });
return d.isValid() ? d.format(this.momentFormat) : '';
}
parse(value: string): NgbDateStruct {
if (!value) {
return null;
}
let d = moment(value, this.momentFormat);
return d.isValid() ? { year: d.year(),
month: d.month() + 1,
day: d.date() } : null;
}
}
Et dans un module, vous incluez le fournisseur utilisant une fabrique pour indiquer le format de date en tant que paramètre:
---
@NgModule({
---
providers: [
{
provide: NgbDateParserFormatter,
useFactory: () => { return new NgbDateMomentParserFormatter("DD-MM-YYYY") }
}
]
---
})
À partir d’aujourd’hui, la meilleure solution consiste à mettre en œuvre une personnalisation NgbDateParserFormatter
. Alors oui, c’est une manière correcte.
Dans le futur, nous aurons peut-être une implémentation plus sophistiquée de NgbDateParserFormatter
où vous pourrez simplement passer le format souhaité (ex. yyyy-MM-dd
). L'ajout de cette fonctionnalité dépendra de l'intérêt de l'utilisateur.
Vous pouvez également vérifier certaines informations de base dans https://github.com/ng-bootstrap/ng-bootstrap/issues/754#issuecomment-247767027
Créer un formateur d’analyseur personnalisé.
import { NgbDateParserFormatter, NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
import { Injectable } from '@angular/core';
@Injectable()
export class NgbDateCustomParserFormatter extends NgbDateParserFormatter {
format(date: NgbDateStruct): string {
return date ? `${isNumber(date.day) ? padNumber(date.day) : ''}-${isNumber(date.month) ? padNumber(date.month) : ''}-${date.year}` : '';
}
}
Définissez le fournisseur pour le formateur de l’analyseur personnalisé dans le @NgModule.
providers: [
{provide: NgbDateParserFormatter, useClass: NgbDateCustomParserFormatter}
]
Comme décrit dans le api