Dans AngularJS, je peux utiliser des filtres (tuyaux) à l'intérieur des services et des contrôleurs en utilisant une syntaxe similaire à ceci:
$filter('date')(myDate, 'yyyy-MM-dd');
Est-il possible d'utiliser des tuyaux dans des services / composants comme celui-ci dans Angular?
Réponses:
Comme d'habitude dans Angular, vous pouvez compter sur l'injection de dépendance:
Ajoutez
DatePipe
à votre liste de fournisseurs dans votre module; si vous oubliez de le faire, vous obtiendrez une erreurno provider for DatePipe
:Mise à jour d'Angular 6 : Angular 6 propose désormais à peu près toutes les fonctions de formatage utilisées par les canaux en public. Par exemple, vous pouvez désormais utiliser
formatDate
directement la fonction.Avant Angular 5 : soyez averti cependant que le
DatePipe
s'appuyait sur l'API Intl jusqu'à la version 5, qui n'est pas prise en charge par tous les navigateurs (consultez le tableau de compatibilité ).Si vous utilisez des versions Angular plus anciennes, vous devez ajouter le
Intl
polyfill à votre projet pour éviter tout problème. Voir cette question connexe pour une réponse plus détaillée.la source
Cette réponse est désormais obsolète
recommander d'utiliser l'approche DI à partir d'autres réponses au lieu de cette approche
Réponse originale:
Vous devriez pouvoir utiliser la classe directement
Par exemple
la source
Date
constructeur javascript , les mois sont0
basés. Il en0
va de même pour janvier et1
février. Corrigé manquanty
error TS2345: Argument of type 'string[]' is not assignable to parameter of type 'string'.
en lignevar formatted = new DatePipe().transform(raw, ['yyyy-MM-dd']);
@NgModule({ providers:[DatePipe] })
puis dans votre classe, importez et injectezconstructor( private datePipe: DatePipe ){}
Oui, c'est possible en utilisant un simple tuyau personnalisé. L'avantage d'utiliser un canal personnalisé est que si nous devons mettre à jour le format de date à l'avenir, nous pouvons aller mettre à jour un seul fichier.
Par exemple
N'oubliez pas d'importer des dépendances.
Exemples de tuyaux personnalisés et plus d'informations
la source
D'autres réponses ne fonctionnent pas en angulaire 5?
J'ai reçu une erreur car DatePipe n'est pas un fournisseur, il ne peut donc pas être injecté. Une solution consiste à le mettre en tant que fournisseur dans votre module d'application, mais ma solution préférée était de l'instancier.
Instanciez-le si nécessaire:
J'ai regardé le code source de DatePipe pour voir comment il a obtenu les paramètres régionaux: https://github.com/angular/angular/blob/5.2.5/packages/common/src/pipes/date_pipe.ts#L15-L174
Je voulais l'utiliser dans un tuyau, donc mon exemple est dans un autre tuyau:
La clé ici est d'importer Inject et LOCALE_ID à partir du noyau angulaire, puis de l'injecter pour que vous puissiez le donner au DatePipe pour l'instancier correctement.
Faire de DatePipe un fournisseur
Dans votre module d'application, vous pouvez également ajouter DatePipe à votre tableau de fournisseurs comme ceci:
Maintenant, vous pouvez simplement l'injecter dans votre constructeur si nécessaire (comme dans la réponse de cexbrayat).
Résumé:
L'une ou l'autre solution a fonctionné, je ne sais pas quel angulaire considérerait le plus "correct" mais j'ai choisi de l'instancier manuellement car angulaire ne fournissait pas de datepipe en tant que fournisseur lui-même.
la source
new
montez le tuyau, vous devez toujours DI les paramètres régionaux. Je trouve toute la@Inject(LOCALE_ID) private locale: string
syntaxe compliquée.Si vous ne voulez pas faire 'new myPipe ()' parce que vous injectez des dépendances à pipe, vous pouvez injecter dans le composant comme fournisseur et utiliser sans nouveau.
Exemple:
la source
Si vous souhaitez utiliser votre tuyau personnalisé dans vos composants, vous pouvez ajouter
annotation à votre tuyau personnalisé. Ensuite, vous pouvez l'utiliser comme un service
la source
providedIn: 'root'
intérieur de notre tuyau ou fourni dans un module local où le tuyau est utilisé?Depuis Angular 6, vous pouvez importer
formatDate
depuis l'@angular/common
utilitaire pour l'utiliser à l'intérieur des composants.Il a été introduit sur https://github.com/smdunn/angular/commit/3adeb0d96344c15201f7f1a0fae7e533a408e4ae
Je peux être utilisé comme:
Bien que les paramètres régionaux doivent être fournis
la source
Vous pouvez utiliser formatDate () pour formater la date dans les services ou les composants ts. syntaxe:-
importer le formatDate () à partir d'un module commun comme celui-ci,
et il suffit de l'utiliser dans la classe comme celle-ci,
Vous pouvez également utiliser les options de format prédéfinies fournies par angular comme ceci,
Vous pouvez voir toutes les autres options de format prédéfinies ici,
la source