Maison > interface Web > js tutoriel > Changer la détection en angulaire: tout ce que vous devez savoir

Changer la détection en angulaire: tout ce que vous devez savoir

Christopher Nolan
Libérer: 2025-02-15 11:23:12
original
542 Les gens l'ont consulté

Change Detection in Angular: Everything You Need to Know

Analyse approfondie du mécanisme de détection des changements angulaires

Cet article explorera en profondeur le mécanisme de détection des changements d'Angular, révèlera ses principes de fonctionnement sous-jacents et fournira des stratégies d'optimisation. Il y a relativement peu d'informations sur ce sujet sur Internet.

Concept Core: View (View)

Les applications angulaires ne sont pas composées uniquement de composants, mais affichent les arbres. Chaque composant correspond à une vue, qui est l'unité de base de l'architecture de l'interface utilisateur angulaire, et est responsable de la gestion de toutes les vérifications de la propriété et des mises à jour DOM. La description de la vue dans le code source est la suivante:

La vue est l'élément de base de l'interface utilisateur de l'application. C'est le plus petit groupe d'éléments créés et détruits ensemble.

Les propriétés des éléments dans la vue peuvent être modifiées, mais la structure (nombre et ordre) des éléments dans la vue ne peut pas être modifiée. La modification de la structure d'un élément ne peut être effectuée qu'en insérant, en déplaçant ou en supprimant des vues imbriquées à l'aide de ViewContainerRef. Chaque vue peut contenir plusieurs conteneurs de vue.

Dans cet article, nous utilisons des vues de composants et des concepts de composants de manière interchangeable. Il convient de noter que de nombreux articles Web et des réponses de débordement de pile se réfèrent à la vue décrite ici comme "Modifier l'objet de détection" ou "ModigetectorRef". En fait, il n'y a pas d'objet de détection de changement distinct dans Angular, la détection des changements agit directement sur la vue.

Chaque vue est liée à sa sous-vue via la propriété nodes, permettant de réaliser des actions sur la sous-vue.

Affichage de l'état (ViewState)

Les vues ont des états, qui jouent un rôle clé pour décider s'il faut exécuter la détection des changements pour une vue et tous ses sous-vues. Les états importants comprennent:

  1. FirstCheck: Indique si la vue est la première vérification.
  2. ChecksEnabled: Indique s'il faut permettre la détection du changement de la vue.
  3. Errored: indique si une erreur s'est produite dans la vue.
  4. Destroyed: indique si la vue a été détruite.

Si ChecksEnabled est false, ou si la vue est dans l'état Errored ou Destroyed, la détection de changement de la vue et de ses sous-vues est ignorée. Par défaut, toutes les vues sont initialisées avec ChangeDetectionStrategy.OnPush sauf si ChecksEnabled est utilisée.

Angular fournit des concepts avancés pour manipuler des vues, telles que ViewRef, qui résume la vue sous-jacente et possède une méthode detectChanges. Lorsqu'un événement asynchrone se produit, Angular déclenche sa détection de changement de niveau de haut niveau, qui détecte récursivement la sous-vue après sa propre détection de changement. ViewRef ViewRef le

peut être injecté dans le constructeur du composant à travers le jeton

: ChangeDetectorRef ViewRef

export class AppComponent {
  constructor(cd: ChangeDetectorRef) { ... }
}
Copier après la connexion
Opération de détection de modification

Les fonctions

checkAndUpdateView sont la logique principale responsable de l'exécution de la détection du changement de vue. La fonction s'appelle récursivement, à partir du composant hôte, en vérifiant à son tour chaque composant et ses sous-composants.

Lorsque la fonction est tirée, elle effectue des opérations dans l'ordre suivant:

  1. set ViewState.firstCheck.
  2. Vérifiez et mettez à jour les propriétés d'entrée des sous-composants / instructions Instances.
  3. Mettez à jour l'état de détection des modifications de la sous-vue (partie de la mise en œuvre de la stratégie de détection des modifications).
  4. Exécutez la détection de changement de la vue intégrée (répétez les étapes ci-dessus).
  5. Si la liaison change, le crochet de cycle de vie OnChanges du composant enfant est appelé.
  6. appelle les crochets de cycle de vie OnInit et ngDoCheck du sous-composant (OnInit est appelé uniquement sur le premier chèque).
  7. Mettez à jour la liste ContentChildren Requête des instances de composants SubView.
  8. Appelez les crochets de cycle de vie AfterContentInit et AfterContentChecked de l'instance de sous-composant (AfterContentInit est appelé uniquement sur la première vérification).
  9. Si les propriétés de l'instance de composante de vue actuelle changent, mettez à jour l'interpolation DOM de la vue actuelle.
  10. Exécutez la détection de changement de la sous-vue (répétez les étapes ci-dessus).
  11. Mettez à jour la liste de requête ViewChildren pour l'instance de composante de vue actuelle.
  12. Appelez les crochets de cycle de vie AfterViewInit et AfterViewChecked de l'instance de sous-composant (AfterViewInit est appelé uniquement sur la première vérification).
  13. Désactiver la vérification de la vue actuelle (partie de la mise en œuvre de la politique de détection des modifications).

Changer la stratégie de détection et le déclencheur manuel

ChangeDetectionStrategy.OnPush La politique peut réduire considérablement les frais généraux de performance car il effectue la détection des changements que lorsque les données réelles changent, telles que les changements d'attribut d'entrée ou les lancements d'événements explicites.

ChangeDetectorRef fournit des méthodes telles que detectChanges(), markForCheck() et detach() pour permettre un contrôle plus fin de la détection des changements, en particulier dans les applications grandes et complexes.

(Les éléments suivants introduiront en détail la méthode d'utilisation de ChangeDetectorRef et les stratégies d'optimisation pour la détection des changements, y compris les scénarios d'application spécifiques et les exemples de codes du detach(), reattach(), markForCheck() et detectChanges() Méthodes.

(Le reste de l'article continuera d'explorer comment utiliser ces méthodes pour optimiser les performances et fournir des scénarios d'application pratiques et des exemples de code.)

(Enfin, l'article résumera les questions fréquemment posées sur la détection des changements angulaires, couvrant les stratégies ONPUSH, les techniques d'optimisation de détection des changements, le rôle des zones et les méthodes de débogage de détection des changements.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal