Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Création de Directives Personnalisées dans Angular | Mastering Angular Directives and Pipes
Introduction à Angular

bookCréation de Directives Personnalisées dans Angular

Angular propose un ensemble de directives intégrées telles que ngIf, ngFor et ngClass. Cependant, il est également possible de créer vos propres directives personnalisées pour gérer des tâches spécifiques dans votre application. Voici un exemple pratique pour illustrer la création d'une directive personnalisée.

Génération de la directive personnalisée

Il est recommandé d'organiser votre code en créant un dossier dédié pour vos directives. Nommez-le directives.

Cette commande crée un nouveau dossier nommé directives dans le répertoire app et ajoute le fichier de la nouvelle directive à l'intérieur :

  • highlight-on-complete.directive.ts – contient la logique de la directive ;

  • highlight-on-complete.directive.spec.ts – fichier de test unitaire (vous pouvez le supprimer si non nécessaire).

Voici la structure de base de la directive :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Définir le comportement de la directive

Cette directive mettra en surbrillance un élément de tâche en vert s'il est marqué comme terminé. Sinon, elle supprimera les styles.

Pour indiquer à Angular que cette classe est une directive, on l'orne avec @Directive :

@Directive({
  selector: '[appHighlightOnComplete]'
})

Le sélecteur [appHighlightOnComplete] signifie que la directive sera utilisée comme un attribut, et non comme une balise ou une directive structurelle.

Dans votre HTML, vous l'appliquerez ainsi :

<div [appHighlightOnComplete]="task.completed"></div>

Faire réagir la directive aux changements

Pour détecter les modifications de l'entrée completed, nous implémentons l'interface OnChanges :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Nous définissons également une propriété d'entrée pour recevoir la valeur depuis le composant :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Ce que cela fait :

  • Informe Angular que la valeur sera fournie depuis le template (précédemment, nous avons passé task.complete depuis le template) ;

  • Lie la propriété interne completed de la directive à la valeur transmise depuis le template ;

  • Définit une valeur par défaut à true (qui sera remplacée dès que les données réelles seront reçues).

Accès sécurisé au DOM

Angular utilise l'injection de dépendances pour fournir l'accès au DOM et aux outils de rendu.

Dans le constructeur, nous injectons :

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nous donne une référence à l’élément DOM hôte. Renderer2 nous permet de modifier en toute sécurité les styles et attributs sans manipuler directement le DOM.

Réagir aux changements avec ngOnChanges

Implémentation de la logique principale dans ngOnChanges, qui s’exécute à chaque modification de la valeur d’entrée.

Implémentation complète :

highlight-on-complete.ts

highlight-on-complete.ts

copy

La méthode ngOnChanges est déclenchée chaque fois qu'Angular détecte des modifications des propriétés d'entrée de la directive.

Dans ce cas, elle réagit aux mises à jour de la valeur completed transmise depuis le template. Si completed est true, la directive ajoute une bordure verte et un fond vert clair à l'élément. Si elle est false, ces styles sont supprimés, rendant à l'élément son apparence d'origine. Cela fournit une indication visuelle des tâches terminées.

Cette directive personnalisée permet d'encapsuler le comportement de style de manière réutilisable et propre. Vous pouvez désormais l'appliquer à n'importe quel élément de votre application, sans dupliquer la logique dans plusieurs composants. C'est un excellent exemple de la façon dont le système de directives d'Angular aide à écrire un code plus modulaire et maintenable.

question mark

Que fait la directive highlight-on-complete ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

bookCréation de Directives Personnalisées dans Angular

Angular propose un ensemble de directives intégrées telles que ngIf, ngFor et ngClass. Cependant, il est également possible de créer vos propres directives personnalisées pour gérer des tâches spécifiques dans votre application. Voici un exemple pratique pour illustrer la création d'une directive personnalisée.

Génération de la directive personnalisée

Il est recommandé d'organiser votre code en créant un dossier dédié pour vos directives. Nommez-le directives.

Cette commande crée un nouveau dossier nommé directives dans le répertoire app et ajoute le fichier de la nouvelle directive à l'intérieur :

  • highlight-on-complete.directive.ts – contient la logique de la directive ;

  • highlight-on-complete.directive.spec.ts – fichier de test unitaire (vous pouvez le supprimer si non nécessaire).

Voici la structure de base de la directive :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Définir le comportement de la directive

Cette directive mettra en surbrillance un élément de tâche en vert s'il est marqué comme terminé. Sinon, elle supprimera les styles.

Pour indiquer à Angular que cette classe est une directive, on l'orne avec @Directive :

@Directive({
  selector: '[appHighlightOnComplete]'
})

Le sélecteur [appHighlightOnComplete] signifie que la directive sera utilisée comme un attribut, et non comme une balise ou une directive structurelle.

Dans votre HTML, vous l'appliquerez ainsi :

<div [appHighlightOnComplete]="task.completed"></div>

Faire réagir la directive aux changements

Pour détecter les modifications de l'entrée completed, nous implémentons l'interface OnChanges :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Nous définissons également une propriété d'entrée pour recevoir la valeur depuis le composant :

highlight-on-complete.ts

highlight-on-complete.ts

copy

Ce que cela fait :

  • Informe Angular que la valeur sera fournie depuis le template (précédemment, nous avons passé task.complete depuis le template) ;

  • Lie la propriété interne completed de la directive à la valeur transmise depuis le template ;

  • Définit une valeur par défaut à true (qui sera remplacée dès que les données réelles seront reçues).

Accès sécurisé au DOM

Angular utilise l'injection de dépendances pour fournir l'accès au DOM et aux outils de rendu.

Dans le constructeur, nous injectons :

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nous donne une référence à l’élément DOM hôte. Renderer2 nous permet de modifier en toute sécurité les styles et attributs sans manipuler directement le DOM.

Réagir aux changements avec ngOnChanges

Implémentation de la logique principale dans ngOnChanges, qui s’exécute à chaque modification de la valeur d’entrée.

Implémentation complète :

highlight-on-complete.ts

highlight-on-complete.ts

copy

La méthode ngOnChanges est déclenchée chaque fois qu'Angular détecte des modifications des propriétés d'entrée de la directive.

Dans ce cas, elle réagit aux mises à jour de la valeur completed transmise depuis le template. Si completed est true, la directive ajoute une bordure verte et un fond vert clair à l'élément. Si elle est false, ces styles sont supprimés, rendant à l'élément son apparence d'origine. Cela fournit une indication visuelle des tâches terminées.

Cette directive personnalisée permet d'encapsuler le comportement de style de manière réutilisable et propre. Vous pouvez désormais l'appliquer à n'importe quel élément de votre application, sans dupliquer la logique dans plusieurs composants. C'est un excellent exemple de la façon dont le système de directives d'Angular aide à écrire un code plus modulaire et maintenable.

question mark

Que fait la directive highlight-on-complete ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 4
some-alt