Skip to content

Comment créer une directive pour gérer le rendu (ElementRef) dans Angular ?

Voici comment créer une directive qui gère le rendu dans Angular en utilisant l'objet ElementRef :

ts
import { ElementRef, Directive, inject } from '@angular/core';

@Directive({
  selector: '[appMyDirective]',
  standalone: true
})
export class MyDirective {
  private el = inject(ElementRef);
}

Vous pouvez maintenant utiliser l'objet ElementRef pour accéder à l'élément DOM et le modifier en utilisant ses propriétés et méthodes. Par exemple, vous pouvez changer la couleur de fond de l'élément en utilisant la propriété "style.backgroundColor":

ts
this.el.nativeElement.style.backgroundColor = 'red';

Voici un exemple complet de directive qui modifie la couleur de fond de l'élément sur lequel elle est appliquée lorsqu'un bouton est cliqué:

ts
import { ElementRef, Directive, HostListener, inject } from '@angular/core';

@Directive({
  selector: '[appMyDirective]',
  standalone: true
})
export class MyDirective {
  private el = inject(ElementRef);

  @HostListener('click') onClick() {
    this.changeColor();
  }

  private changeColor() {
    this.el.nativeElement.style.backgroundColor = 'red';
  }
}

Pour utiliser cette directive, vous pouvez l'appliquer à n'importe quel élément HTML comme ceci:

html
<button appMyDirective>Cliquez pour changer la couleur de fond</button>

Utiliser le décorateur HostBinding ?

Voici un exemple de directive qui utilise @HostBinding pour modifier la propriété "style.backgroundColor" de l'élément DOM sur lequel elle est appliquée :

ts
import { Directive, HostBinding } from '@angular/core';

@Directive({
  selector: '[appMyDirective]',
  standalone: true
})
export class MyDirective {
  @HostBinding('style.backgroundColor') backgroundColor = '';

  setColor(color: string) {
    this.backgroundColor = color;
  }
}

Pour utiliser cette directive, vous pouvez l'appliquer à n'importe quel élément HTML et appeler la méthode setColor() pour changer la couleur de fond de l'élément :

html
<button appMyDirective (click)="myDirective.setColor('red')">Cliquez pour changer la couleur de fond</button>

Notez que @HostBinding vous permet de lier une propriété de l'élément DOM hôte à une propriété de votre directive. Dans cet exemple, la propriété "style.backgroundColor" de l'élément DOM est liée à la propriété "backgroundColor" de la directive. Lorsque vous modifiez la valeur de "backgroundColor" dans la directive, la valeur de "style.backgroundColor" de l'élément DOM est également modifiée.

[Vidéo] Les signaux dans Angular en 3mn

En juillet, recevez notre newsletter avec les dernières actualités et, en avant-première, un lien vers notre prochaine vidéo sur les signaux dans Angular.