ng
.
Par exemple, l'interface OnInit
a une méthode de raccordement nommée ngOnInit()
qu'Angular appelle peu après la création du composant :Méthode | Description |
---|---|
ngOnChanges() |
Répond lorsque Angular (re)définit les propriétés d'entrée liées aux données.
La méthode reçoit un objet SimpleChanges des valeurs de propriété actuelles et précédentes.
Appelée avant ngOnInit() et à chaque fois qu'une ou plusieurs propriétés d'entrée liées aux données changent.
|
ngOnInit() |
Initialiser la directive/composante après qu'Angular affiche d'abord les propriétés liées aux données et définit les propriétés d'entrée de la directive/composante.
Appelé une fois, après le premier ngOnChanges() .
|
ngDoCheck() |
Détectez et agissez en fonction de changements que Angular ne peut ou ne veut pas détecter seul.
Appelé à chaque exécution de détection de changement, immédiatement après ngOnChanges() et ngOnInit() .
|
ngAfterContentInit() |
Répondez après le contenu externe des projets angulaires à la vue du composant / à la vue dans laquelle se trouve une directive.
Appelé une fois après le premier ngDoCheck() .
|
ngAfterContentChecked() |
Répondre après que Angular vérifie le contenu projeté dans la directive / le composant.
Appelé après le ngAfterContentInit() et tous les suivants ngDoCheck() .
|
ngAfterViewInit() |
Répondre après Angular initialise les vues du composant et les vues enfants / la vue dans laquelle se trouve une directive.
Appelé une fois après le premier ngAfterContentChecked() .
|
ngAfterViewChecked() |
Répondre après Angular vérifie les vues du composant et les vues enfants / la vue dans laquelle se trouve une directive.
Appelé après le ngAfterViewInit et tous les suivants ngAfterContentChecked() .
|
ngOnDestroy() |
Le nettoyage juste avant qu'Angular ne détruise la directive / le composant. Désabonnez Observables et détachez les gestionnaires d'événements pour éviter les fuites de mémoire. Appelé juste avant qu'angular ne détruise la directive / le composant. |
JavaScript
et Typescript
d'un point de vue purement technique.
Le langage JavaScript
n'a pas d'interfaces.
Angular ne peut pas voir les interfaces TypeScript
au moment de l'exécution car elles disparaissent du code JavaScript
transpilé.ngOnInit()
, avec ou sans les interfaces.TypeScript
afin de tirer parti des outils de frappe et d'éditeur puissants.OnChanges
, OnInit
, DoCheck (3x)
, AfterContentInit
, AfterContentChecked (3x)
, AfterViewInit
, AfterViewChecked (3x)
, et OnDestroy
.name
dans ce cas) n'ont aucune valeur affectée à la construction.OnChanges
et
deux autres DoCheck
, AfterContentCheckedet
et AfterViewChecked
.‹div›
.
Vous ne pouvez pas non plus modifier un composant tiers.
Mais vous pouvez regarder les deux avec une directive.
ngOnInit()
et ngOnDestroy()
raccroche qui enregistre les messages au parent via un injecté LoggerService
.‹div›
:‹div›
avec une entrée dans le journal de crochet, comme on peut le voir ici:‹div›
.
L'espion ngOnInit()
enregistre cet événement.
Le bouton "Réinitialiser" efface la heroesliste
.
Angular supprime tous les ‹div›
éléments héros du DOM et détruit leurs directives d'espionnage en même temps.
La méthode ngOnDestroy()
de l'espion rapporte ses derniers moments.ngOnInit()
et ngOnDestroy()
ont des rôles plus vitaux à jouer dans les applications réelles.ngOnInit()
pour deux raisons principales :ngOnInit()
est un bon endroit pour qu'un composant récupère ses données initiales.ngOnInit()
.ngOnInit()
rapidement après la création du composant,
c'est là que la logique d'initialisation lourde appartient.ngOnDestroy()
, la logique qui doit s'exécuter avant Angular détruit la directive.
C'est le moment de notifier une autre partie de l'application que le composant est en train de disparaître.ngOnChanges()
chaque fois qu'elle détecte des modifications des propriétés d'entrée du composant (ou de la directive).ngOnChanges()
prend un objet qui mappe chaque nom de propriété modifié à un objet SimpleChanges
contenant les valeurs de propriété actuelle et précédente.
Ce crochet parcourt les propriétés modifiées et les enregistre.OnChanges
, a deux propriétés d'entrée: hero
et power
.OnChangesParent
se lie à eux comme ceci :hero
est la référence à l'objet héros.
Angular se moque que la propriété name
du héros ait changé.
La référence à l'objet héros n'a pas changé, donc, du point de vue d'Angular, il n'y a pas de changement à signaler !hero
ou le power
afin que vous puissiez voir la fréquence de l'appel au ngDoCheck()
.ngDoCheck()
puisse détecter quand le héros name
a changé, il a un coût effroyable.
Ce hook est appelé avec une fréquence énorme, après chaque cycle de détection de changement, peu importe où le changement s'est produit.
Il est appelé plus de vingt fois dans cet exemple.‹input›
déclenche un appel.
Relativement peu d'appels révèlent des modifications réelles des données pertinentes.
Il est clair que notre implémentation doit être très légère sinon l'expérience utilisateur en souffre.AfterViewInit()
et AfterViewChecked()
qu'Angular appelle après avoir créé les vues enfant d'un composant.
Voici une vue enfant qui affiche le nom d'un héros dans un ‹input›
:ChildComponent
AfterView
affiche cette vue enfant dans son modèle :AfterViewComponent (modèle)
@ViewChild
.AfterViewComponent (extraits de classe)
doSomething()
met à jour l'écran lorsque le nom du héros dépasse 10 caractères.
doSomething()
attend-elle avant de mettre à jour ?Service.tick_then()
reporte la mise à jour du journal pour un tour du cycle JavaScript du navigateur.AfterViewChecked()
, souvent lorsqu'il n'y a pas de changement d'intérêt.
Ecrire des méthodes de crochet maigre pour éviter les problèmes de performance.AfterContent
explore les crochets AfterContentInit()
et les appels AfterContentChecked()
qu'Angular appelle après le contenu externe de projets Angular dans le composant.
AfterView
précédent.
Cette fois, au lieu d'inclure la vue enfant dans le modèle, le contenu est importé du Component AfterContent
parent.‹app-child›
est cachée entre les balises ‹after-content›
.
Ne mettez jamais du contenu entre les balises d'élément d'un composant,
sauf si vous avez l'intention de projeter ce contenu dans le composant.‹ng-content›
est un espace réservé pour le contenu externe.
Il indique à Angular où insérer ce contenu. Dans ce cas, le contenu projeté ‹app-child›
provient du parent.AfterContent
sont similaires aux hooks AfterView
.
La principale différence réside dans le composant enfant.AfterView
concernent ViewChildren
les composants enfants dont les balises d'élément apparaissent dans le modèle du composant.AfterContent
concernent les composants enfants ContentChildren
qu'Angular a projetés dans le composant.AfterContent
suivants agissent en fonction de la modification des valeurs dans un enfant de contenu,
accessible uniquement en les interrogeant via la propriété décorée avec @ContentChild
.doSomething()
de ce composant met immédiatement à jour la propriété liée aux données du composant.AfterContent
avant d'appeler l'un des points d'ancrage AfterView
.
Angular complète la composition du contenu projeté avant de terminer la composition de la vue de ce composant.