Bienvenue sur CodeWise ! Si vous êtes nouveau ici, vous voudrez sans doute découvrir notre Starter Kit Angular : il contient une roadmap du parcours d'un dev Angular, ainsi qu'un cookbook des commandes les plus utiles et un extrait de formation. Cliquez ici pour le télécharger (c’est gratuit !)
Qu'est-ce qu'un pipe dans le framework Angular ? Dans cet article, apprenez à vous servir des pipes natifs Angular et créez-en de nouveaux.
Un pipe c'est quoi ?
Le pipe est un moyen d’appliquer des transformations sur nos données, directement depuis le template HTML.
1
<p> Date de réception : {{ receptionDate | date | uppercase }} </p>
En terme de concept
Un pipe est défini par :
- une donnée en entrée (paramètre)
- une donnée en sortie (valeur de retour)
- une fonction de transformation (mapping)
Et optionellement, on peut envoyer un paramètre en plus de la valeur d'input.
Dans Angular, on distingue 2 types de pipes : les pipes natifs - venant des librairies Angular - et les pipes custom que vous codez vous-même.
En terme de code
Prenons pour exemple le pipe date
natif dans Angular :
On commence par déclarer une variable birthday
dans le fichier TypeScript de votre composant.
1
public birthday: Date = new Date(1988, 3, 15);
Ensuite, dans votre HTML on souhaite l'afficher dans un format user-friendly et lisible.
1
<p>La date de naissance du héros est {{ birthday | date: 'mediumDate' }}</p>
Dans cet exemple, le pipe DatePipe
prend en entrée la valeur birthday
et le paramètre 'mediumDate'
.
Notez bien que pour passer un paramètre, on utilise des ":
".
Si le pipe accepte plusieurs paramètres, on peut les lui passer en séparant les paramètres entre eux par des ":
" aussi.
Finalement, on obtient en sortie :
Les 2 types de pipe
Pour la plupart des besoins, un pipe natif est déjà codé dans une librairie Angular. Mais dans certains cas, il faut le coder soi-même !
Les pipes natifs Angular
@angular/common
.
Voyons ensemble les pipes natifs les plus courants.
DatePipe
Le DatePipe
sert à formater une date.
Utilisez-le avec un des formats prédéfinis ou selon une "format-string" que vous pouvez définir.
Par défaut, le format est 'mediumDate'
.
1
2
3
4
{{ dateObj | date }} // output is 'Jun 15, 2015'
{{ dateObj | date:'medium' }} // output is 'Jun 15, 2015, 9:43:11 PM'
{{ dateObj | date:'shortTime' }} // output is '9:43 PM'
{{ dateObj | date:'mm:ss' }} // output is '43:11'
Input : Un objet JS Date
Output : Une chaîne de caractères formatée
UpperCasePipe
Le UpperCasePipe
sert à passer un texte en majuscule.
1
{{ 'hello world!' | uppercase }} // output is 'HELLO WORLD!'
Input : Une chaîne de caractères
Output : Une chaîne de caractères en majuscules
LowerCasePipe
Le LowerCasePipe
sert à passer un texte en minuscule.
1
{{ 'HELLO WORLD!' | lowercase }} // output is 'hello world!'
Input : Une chaîne de caractères
Output : Une chaîne de caractères en minuscules
CurrencyPipe
Le CurrencyPipe
sert à formater un nombre en écriture monétaire.
1
2
3
4
5
<!--output '$0.26'-->
<p>Amount: {{amount | currency}}</p>
<!--output 'CA$0.26'-->
<p>Amount: {{amount | currency:'CAD'}}</p>
Input : Une valeur numérique
Output : Une chaîne de caractères formatée pour afficher un montant
DecimalPipe
Le DecimalPipe
sert à formater un nombre en écriture décimale.
1
2
3
4
5
6
7
8
9
10
11
<!--output '2.718'-->
<p>e (no formatting): {{e | number}}</p>
<!--output '002.71828'-->
<p>e (3.1-5): {{e | number:'3.1-5'}}</p>
<!--output '0,002.71828'-->
<p>e (4.5-5): {{e | number:'4.5-5'}}</p>
<!--output '0 002,71828'-->
<p>e (french): {{e | number:'4.5-5':'fr'}}</p>
Input : Une valeur numérique
Output : Une chaîne de caractères qui représente un nombre avec une virgule décimale
PercentPipe
Le PercentPipe
sert à formater un nombre en pourcentage.
1
2
3
4
5
<!--output '26%'-->
<p>A: {{a | percent}}</p>
<!--output '0,134.950%'-->
<p>B: {{b | percent:'4.3-5'}}</p>
Input : Une valeur numérique
Output : Une chaîne de caractères qui représente le nombre en pourcentage
Nous avons aussi des articles spécifiques sur certains pipes : Pipe slice, Pipe async, Pipe json .
Liste complète des pipes natifs
Vous trouverez une liste exhaustive des pipes natifs d'Angular, en cliquant sur ce lien : Liste pipes natifs Angular
Créer son propre pipe
Il est tout à fait possible et même recommandé de créer sa propre petite armada de pipes. Prenons comme exemple un pipe de calcul d'exponentielle, qui prend en entrée : une valeur numérique et un exposant.
Générer un pipe avec le CLI Angular
Entrez simplement la commande suivante à la racine de votre projet :
ou alors
Ca devrait vous générer un composant semblable à celui-ci :
1
2
3
4
5
6
7
8
9
10
11
12
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'exponential'
})
export class ExponentialPipe implements PipeTransform {
transform(value: unknown, ...args: unknown[]): unknown {
return null;
}
}
Coder la transformation des données (mapping)
Dans le code du pipe généré par le CLI, remarquez la présence d'une méthode transform()
qui prend en entrée
une valeur, value
, et un tableau de paramètres ...args
.
Cette méthode vient de l'interface PipeTransform
qui est implémentée par votre pipe. À vous alors d'implémenter cette méthode !
Dans nôtre cas, on ne s'attend à recevoir qu'un paramètre : l'exposant.
On peut donc remplacer le spread operator ...
par une simple variable exponent
typée en number
.
La valeur en entrée du pipe et la valeur de retour seront de type number
également.
1
2
3
4
5
6
7
8
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'exponential'})
export class ExponentialPipe implements PipeTransform {
transform(value: number, exponent?: number): number {
return Math.pow(value, isNaN(exponent) ? 1 : exponent);
}
}
Utiliser votre nouveau pipe
Pour appeler votre nouveau pipe, placez-vous dans votre fichier HTML, à l'intérieur d'une interpolation (les doubles accolades {{}}
) et inscrivez-y :
- Une valeur numérique
- Le symbole
|
- Le nom de votre pipe :
exponential
- Le symbole
:
- La valeur de l'exposant à calculer
Ce qui vous donne :
1
2
<h2>2 exponentiel 10</h2>
<p>Résultat: {{2 | exponential: 10}}</p>
Comment chainer les pipes ?
Etant donné qu'ils ont tous une valeur d'entrée et de sortie, il est possible de chainer les pipes.
1
<p> Date de réception : {{ receptionDate | date | uppercase }} </p>
Dans cet exemple, le DatePipe est appelé en premier et transforme la date en string
.
On fait ensuite appel au pipe UpperCasePipe, pour passer cette string en majuscule.
Vous pouvez en chainer autant que vous le souhaitez à condition que les types d'entrée et de sortie soient compatibles.
Vous savez tout. Il ne vous reste plus qu'à essayer par vous même.
Bon code !
Sources
- Les pipes natifs Angular : Documentation @angular/common
- Guide Angular - Les pipes : Transforming Data Using Pipes
Téléchargez votre Starter Kit Angular
En souscrivant vous recevrez :
- Une roadmap d'un développeur Angular
- Un cookbook Angular des commandes les plus utiles
- Un extrait de formation
100% gratuit.