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.