Angular : directive Achref El Mouelhi Docteur de l’universit´ e d’Aix-Marseille
Angular : directive Achref El Mouelhi Docteur de l’universit´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing´ enieur en g´ enie logiciel elmouelhi.achref@gmail.com H & H: Research and Training 1 / 13 © Achref EL MOUELHI © Angular On a utilis´ e deux types de directives Angular directives structurelles : ayant comme but de modifier le DOM (ngIf, ngFor...) directives attribute : ayant comme but de modifier l’apparence ou le comportement d’un ´ el´ ement (ngStyle, ngClass...) H & H: Research and Training 2 / 13 © Achref EL MOUELHI © Angular On a utilis´ e deux types de directives Angular directives structurelles : ayant comme but de modifier le DOM (ngIf, ngFor...) directives attribute : ayant comme but de modifier l’apparence ou le comportement d’un ´ el´ ement (ngStyle, ngClass...) Il est possible de cr´ eer sa propre directive attribute Il faut cr´ eer une classe TypeScript avec le d´ ecorateur @Directive ayant une propri´ et´ e selector La valeur de la propri´ et´ e selector peut-ˆ etre utilis´ ee comme attribut de balise dans les templates H & H: Research and Training 2 / 13 © Achref EL MOUELHI © Angular Pour cr´ eer une directive ng generate directive nom-directive H & H: Research and Training 3 / 13 © Achref EL MOUELHI © Angular Pour cr´ eer une directive ng generate directive nom-directive Ou le raccourci ng g d nom-directive H & H: Research and Training 3 / 13 © Achref EL MOUELHI © Angular Pour cr´ eer une directive ng generate directive nom-directive Ou le raccourci ng g d nom-directive Exemple : d´ efinissons une directive (mouvement) qui modifier l’apparence d’un ´ el´ ement quand la souris passe au dessus ng g d directives/mouvement H & H: Research and Training 3 / 13 © Achref EL MOUELHI © Angular Le r´ esultat CREATE src/app/directives/mouvement.directive.spec.ts (236 bytes) CREATE src/app/directives/mouvement.directive.ts (147 bytes) UPDATE src/app/app.module.ts (1035 bytes) Explication : deux fichiers g´ en´ er´ es mouvement.directive.spec.ts mouvement.directive.ts d´ eclaration de la directive dans app.module.ts H & H: Research and Training 4 / 13 © Achref EL MOUELHI © Angular Contenu du mouvement.directive.ts import { Directive } from ’@angular/core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { constructor() { } } H & H: Research and Training 5 / 13 © Achref EL MOUELHI © Angular Pour r´ ef´ erencer les ´ el´ ements concern´ es par la directive, on fait une injection de d´ ependance de ElementRef import { Directive, ElementRef } from ’@angular/core ’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { constructor(private el: ElementRef) { } } H & H: Research and Training 6 / 13 © Achref EL MOUELHI © Angular Pour changer la couleur de fond d’un ´ el´ ement utilisant cette directive import { Directive, ElementRef } from ’@angular/core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { constructor(private el: ElementRef) { el.nativeElement.style.backgroundColor = ’red’; } } H & H: Research and Training 7 / 13 © Achref EL MOUELHI © Angular Pour changer la couleur de fond d’un ´ el´ ement utilisant cette directive import { Directive, ElementRef } from ’@angular/core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { constructor(private el: ElementRef) { el.nativeElement.style.backgroundColor = ’red’; } } Pour tester, ajouter le code suivant dans app.component.html (par exemple) <p appMouvement> mon texte </p> H & H: Research and Training 7 / 13 © Achref EL MOUELHI © Angular Hypoth` ese Si on voulait modifier la couleur de fond d’un ´ el´ ement s’il est survol´ e Et remettre sa couleur ` a la sortie du curseur Il faut attacher des ´ ev` enements aux changements de couleur On peut utiliser un d´ ecorateur Angular : @HostListener qui prend comme param` etre le nom d’un ´ ev` enement H & H: Research and Training 8 / 13 © Achref EL MOUELHI © Solution import { Directive, ElementRef, HostListener } from ’@angular/ core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { constructor(private el: ElementRef) { } @HostListener(’mouseenter’) onMouseEnter() { this.changerCouleur(’skyblue’); } @HostListener(’mouseleave’) onMouseLeave() { this.changerCouleur(’white’); } changerCouleur(couleur: string) { this.el.nativeElement.style.backgroundColor = couleur; } } H & H: Research and Training 9 / 13 © Achref EL MOUELHI © Angular Hypoth` ese Si on voulait que la couleur affich´ ee soit pass´ ee comme valeur de notre attribut appMouvement On peut utiliser @Input H & H: Research and Training 10 / 13 © Achref EL MOUELHI © Angular Hypoth` ese Si on voulait que la couleur affich´ ee soit pass´ ee comme valeur de notre attribut appMouvement On peut utiliser @Input Par exemple <p [appMouvement]="’red’"> mon texte </p> H & H: Research and Training 10 / 13 © Achref EL MOUELHI © Angular Hypoth` ese Si on voulait que la couleur affich´ ee soit pass´ ee comme valeur de notre attribut appMouvement On peut utiliser @Input Par exemple <p [appMouvement]="’red’"> mon texte </p> Dans ce cas, maCouleur est un attribut d´ efini dans la classe associ´ ee <p [appMouvement]="maCouleur"> mon texte </p> H & H: Research and Training 10 / 13 © Achref EL MOUELHI © Angular Solution import { Directive, ElementRef, HostListener, Input } from ’@angular/ core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { @Input(’appMouvement’) couleur: string; constructor(private el: ElementRef) { } @HostListener(’mouseenter’) onMouseEnter() { this.changerCouleur(this.couleur); } @HostListener(’mouseleave’) onMouseLeave() { this.changerCouleur(’white’); } changerCouleur(color: string) { this.el.nativeElement.style.backgroundColor = color; } } H & H: Research and Training 11 / 13 © Achref EL MOUELHI © On peut utiliser le d´ ecorateur @HostBinding et lui passer le nom d’un attribut HTML de l’´ el´ ement ayant l’attribut que l’on souhaite modifier import { Directive, HostListener, Input, HostBinding } from ’@angular/ core’; @Directive({ selector: ’[appMouvement]’ }) export class MouvementDirective { @HostBinding(’style.backgroundColor’) background; @Input(’appMouvement’) couleur: string; constructor() { } @HostListener(’mouseenter’) onMouseEnter() { this.changerCouleur(this.couleur); } @HostListener(’mouseleave’) onMouseLeave() { this.changerCouleur(’white’); } changerCouleur(color: string) { this.background = color; } } H & H: Research and Training 12 / 13 © Achref EL MOUELHI © Angular Exercice Consid´ erons un composant peintre dont la classe associ´ ee a un attribut couleurs = [’red’, ’skyblue’, ’gray’, ’green’, ’yellow’, ’teal’]. Cr´ eez un composant fils nomm´ e peinture. Le composant peintre a un attribut value recevant sa valeur du tableau composant parent peintre. Le nombre de composants peinture = taille du tableau couleurs. Chaque composant peinture affiche le nom de la couleur qu’il a rec ¸u de son parent. Cr´ eez une directive pinceau qui modifie la couleur de fond des composants peinture survol´ es. La couleur de fond est la valeur de l’attribut value du composant peinture survol´ e. H & H: Research and Training 13 / 13 uploads/Voyage/ cours-angular-directive.pdf
Documents similaires
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/KeNY0Tx20Vi0aghNhQXEVJ4kZROo4EJtdVoZwPnKwsvrAt2bsSw9h23L9Fz18Cany5vsLa5zaZ3h9fKWpgl5PY6y.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/ccxjlkBySkWU6Xao9sAXSREyQD3ZtJPM60uJV5joC4YL0GzME9nuvMxVwXjWcCTNZySb4CZRKESWzmdG7TmryT5n.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/fHUbpJYLQtPssQDuPMs6dQPjpafTDRyPLuyvOBC6iq2qhUcK5LD5KBripYOrA36OMm9YztjIS1wZeEppD2aUu0dF.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/e5UqrZyI0MAF0G4Q4mTuNIC4jhUpw29140UwpCPzvklcB9G6Fn2Us55Y7ZIEO3PBrvCj86GNO1w359MOSpp1XUx4.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/k1u09hxDEYy1S3iAXSp4KSz5iuyaNwBojQ7lquNM3bdEcGKAv20gJxQCmmGNS3w6zcd0ySx4ntM5Mbnehdlb46BH.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/JsASPGdMHziV2KDaGd5TpMUQxUeMXGiFfUqQuJeZD00saQqQhUfk96vQYgiDzRD5oAmNRD7fM3Mpz7s227nhUAmo.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/yAkT1cAzOID467Sr7t3wQBUwccZuYn36Sb0R6HGrWiO3q9cCDUPRmxui5y7Fudczncuz75UvuJtbzzPhojBrpGaw.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/05qEsCdGtnewj9aPnijcQE7aO25JHHH8PoduzdX2d2IPO2modNfLygsDDRy2icavFuxQ0CztBiaZKCLbTJlBif91.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/VnYIL6cl1qQzj395ZEaHx0h5NseicMA7X29JOsqMrlSqWAkKhEj6qj0RkDT0tJbph6jhVsRD44MIHK1JOyu1X6A9.png)
![](https://b3c3.c12.e2-4.dev/disserty/uploads/preview/DXBEsauvubDaoHz8s9JhtZNApt1wK57qfGHzd4Yg4kDKPfJpOtXxBrjEpB67tGdKh8nXbLsp1PPCxb5RCKHh7Aqg.png)
-
22
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 26, 2021
- Catégorie Travel / Voayage
- Langue French
- Taille du fichier 0.2113MB