Skip to content

C'est quoi le change detector ?

Le change detector est un module d'Angular qui permet de détecter les modifications apportées aux données du composant et de mettre à jour le template du composant en conséquence. Le change detector parcourt l'arborescence de données du composant et compare les valeurs actuelles avec les valeurs précédentes pour déterminer si des modifications ont été apportées. Si des modifications sont détectées, le change detector met à jour le template du composant en conséquence.

Le change detector est exécuté de manière asynchrone, de sorte qu'il n'interrompt pas l'exécution de l'application pendant qu'il met à jour le template du composant. Cela signifie que le change detector ne met à jour le template du composant qu'une fois que tous les autres événements ont été traités, ce qui permet à l'application de rester réactive et fluide.

Vous pouvez utiliser le change detector de deux manières dans votre application Angular :

  1. Implicitement : le change detector est exécuté automatiquement par Angular lorsque des modifications sont apportées aux données du composant. C'est la façon la plus courante de travailler avec le change detector.

  2. Explicitement : vous pouvez exécuter le change detector explicitement en appelant la méthode detectChanges de l'injecteur de dépendances d'Angular. Cela peut être utile dans certains cas de figure, comme lorsque vous travaillez avec des données qui ne sont pas surveillées par le change detector par défaut d'Angular.

Utiliser detectChanges

Vous pouvez utiliser le service ChangeDetectorRef avec une injection de dépendance dans votre composant Angular. Le service ChangeDetectorRef est un outil fourni par Angular qui vous permet de contrôler le comportement du change detector dans votre application.

Voici comment utiliser le service ChangeDetectorRef avec une injection de dépendance dans votre composant :

ts
import { Component, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})
export class MyComponentComponent {
  value: string;

  constructor(private cdr: ChangeDetectorRef) { }

  modifyValue() {
    // Modification des données du composant
    this.value = 'Nouvelle valeur';

    // Exécution explicite du change detector
    this.cdr.detectChanges();
  }
}
import { Component, ChangeDetectorRef } from '@angular/core';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.css']
})
export class MyComponentComponent {
  value: string;

  constructor(private cdr: ChangeDetectorRef) { }

  modifyValue() {
    // Modification des données du composant
    this.value = 'Nouvelle valeur';

    // Exécution explicite du change detector
    this.cdr.detectChanges();
  }
}

Dans cet exemple, le service ChangeDetectorRef est injecté dans le constructeur du composant et est utilisé pour exécuter explicitement le change detector lorsque la valeur de la propriété value du composant est modifiée.

WARNING

Il est important de noter que vous devriez éviter d'utiliser le service ChangeDetectorRef si possible, car il peut être coûteux en termes de performance si il est utilisé de manière excessive. Vous devriez utiliser ce service uniquement si vous avez besoin de forcer la détection de modifications dans des données qui ne sont pas surveillées par le change detector par défaut d'Angular. Dans tous les autres cas, vous devriez laisser le change detector s'exécuter de manière implicite.