Pipes pures et impures
Il existe deux catégories de pipes: pure
et impur
. Les pipes sont pures par défaut.
Vous créez un pipe
impur
en définissant sa valeur
pur
à false.
Vous pouvez faire le
Pipe
FlyingHeroes
impur
comme ceci :
Avant de faire cela, comprenez la différence entre
pur
et
impur
, en commençant par un
pipe
pur
.
Pipes pur
Angular exécute un
pipe
pur
uniquement lorsqu'il détecte un changement pur de la valeur d'entrée.
Un changement
pur
est soit un changement à une valeur d'entrée primitive
(
String
,
Number
,
Boolean
,
Symbol
) ou une référence
d'objet modifié (
Date
,
Array
,
Function
,
Object
).
Angular ignore les modifications apportées aux objets (composites).
Cela n'appellera pas un canal
pur
si vous modifiez un mois d'entrée, ajoutez-le à un tableau d'entrée ou mettez à jour une propriété d'objet d'entrée.
Cela peut sembler restrictif, mais c'est aussi rapide.
Une vérification de référence d'objet est rapide (beaucoup plus rapide qu'une vérification approfondie des différences).
Ainsi, Angular peut rapidement déterminer s'il peut ignorer l'exécution du canal et la mise à jour d'une vue.
Pour cette raison, un
pipe
pur
est préférable lorsque vous pouvez vivre avec la stratégie de détection de changement.
Lorsque vous ne pouvez pas, vous pouvez utiliser le
pipe
impur
.
Ou vous pourriez ne pas utiliser de
pipe
du tout.
Il peut être préférable de poursuivre l'objectif du
pipe
avec une propriété du composant, un point qui sera discuté plus tard dans cette page.
Pipes impur
Angular exécute un
pipe
impur
pendant chaque cycle de détection de changement de composant.
Un tuyau
impur
s'appelle souvent, aussi souvent que chaque frappe ou déplacement de souris.
Avec cette préoccupation en tête, installez un
pipe
impur
avec le plus grand soin.
Un pipe long et coûteux pourrait détruire l'expérience utilisateur.
Pipe impur FlyingHeroesPipe
Une simple pression sur le commutateur transforme le
FlyingHeroesPipe
en
FlyingHeroesImpurePipe
.
L'implémentation complète est la suivante :
FlyingHeroesImpurePipe
FlyingHeroesPipe
Vous héritez de
FlyingHeroesPipe
pour prouver le fait que rien n'a changé en interne.
La seule différence est la déclaration
pure
dans les métadonnées du
pipe
.
C'est un bon candidat pour un
pipe
impur
, car sa fonction transform est simple et rapide.
Vous pouvez obtenir un
FlyingHeroesImpureComponent
à partir de
FlyingHeroesComponent
.
Pipe
impur
AsyncPipe
AsyncPipe
est un exemple intéressant de
pipe impur
.
L'
AsyncPipe
accepte un
Promise
ou un
Observable
en tant qu'entrée et s'abonne
automatiquement à l'entrée, pour finalement renvoyer les valeurs émises.
Le
AsyncPipe
est aussi
stateful
.
Le canal maintient un abonnement à l'entrée
Observable
et continue à fournir des valeurs à
Observable
mesure qu'elles arrivent.
Cet exemple suivant lie une chaîne
Observablede
message (
message$
) à une vue avec le
pipe async
.
Le
pipe Async
enregistre le standard dans le code du composant.
Le composant n'a pas besoin de s'abonner à la source de données asynchrone, d'extraire les valeurs résolues et de les exposer pour la liaison,
et de se désabonner lorsqu'il est détruit (une source puissante de fuites de mémoire).
Pipe
impur
de mise en cache
Ecrivez un autre
pipe impur
, qui envoie une requête
HTTP
.
Rappelez-vous que les pipes impurs sont appelés toutes les quelques millisecondes.
Dans le code suivant, le
pipe
n'appelle le serveur que lorsque l'URL demandée change et met en cache la réponse du serveur.
Le code utilise le client http Angular pour récupérer des données :
Maintenant, montrez-le dans un composant dont le modèle définit deux liaisons à ce canal,
demandant toutes les deux aux héros du fichier
heroes.json
.
Le composant se présente comme suit :
Un point d'arrêt sur la demande de données du canal indique ce qui suit:
- Chaque liaison obtient sa propre instance de canal.
- Chaque instance de canal met en cache sa propre URL et ses propres données.
- Chaque instance de canal appelle le serveur une seule fois.
JsonPipe
Dans l'exemple de code précédent, la deuxième liaison de
pipe
d'extraction illustre davantage de chaînage de
pipe
.
Il affiche les mêmes données au format
JSON
en s'enchaînant avec le
JsonPipe
intégrées .
Le JsonPipe
offre un moyen simple de diagnostiquer une laison de données qui échoue mystérieusement ou d'inspecter un objet pour une laison future.
Pipe pur
et fonction pur
Un
pipe pur
utilise des
fonction pur
.
Les fonctions pures traitent les entrées et renvoient les valeurs sans effets secondaires détectables.
Avec la même entrée, ils devraient toujours retourner la même sortie.
Les pipes décrits plus haut dans cette page sont implémentés avec des fonctions pures.
L'intégré
DatePipe
est un
pipe pur
avec une implémentation de fonction pure.
Ainsi le sont les pipes
ExponentialStrengthPipe
et
FlyingHeroesPipe
.
Précédemment, vous avez examiné le
FlyingHeroesImpurePipe
, un
pipe impur
avec une
fonction pur
.