Comment sâattacher Ă des composants HTML de la page et interagir avec eux ? Câest grĂące aux directives que vous allez pouvoir le faire dans Angular.
Chaque directive a un sĂ©lecteur css (enfin comme si câĂ©tait un sĂ©lecteur css).
Trois types de directive :
- Les composants (Component)
- Les directives dâattribut
- Les directives structurelles (comme ngIf, ou ngFor)
A noter que la déclaration de la directive a une importance.
Si on met : selector : â[unselector]â, il sâagit dâune directive dâattribut, si lâon met : selector : âunselectorâ, câest comme si câĂ©tait un composant (cela sâapplique partout, et pas que pour les attributs).
Toujours importer et déclarer la directive dans le Module
Pour que la directive soit reconnue par lâapplication Angular, vous devez lâimport et la rĂ©fĂ©rencer dans le module :
import { HighlightDirective } from ‘./highlight.directive’;
@NgModule({
imports: [
BrowserModule
],
declarations: [
AppComponent,
HighlightDirective
],
bootstrap: [
AppComponent//moduleracineaudémarrage
]
})
export class AppModule {
}
Les directives dâattribut
La crĂ©ation dâune directive se fait grĂące au gĂ©nĂ©rateur du angular CLI : ng generate directive highLight.
Il va crĂ©er une classe TypeScript : avec lâattribut de classe : @Directive :
@Directive({
selector: ‘[appHighlight]’ // app{name} to stop confusing between this selector and a true css selector, don’t use ng{name} !
})
Â
NOTE: on peut mĂȘme affiner notre sĂ©lecteur : @Directive({selector: ‘button[counting]’}). Voulant dire : tous les boutons qui ont le selecteur counting (<button counting />)
En important en plus ElementRef :
import { ElementRef, Directive } from ‘@angular/core’;
Â
On peut profiter de lâaccĂšs dĂšs le constructeur Ă lâĂ©lĂ©ment oĂč est la directive dans le DOM.
Ainsi, nous pouvons trÚs rapidement appliquer le principe DRY, et dire que tous les éléments du DOM qui auront la directive appHightLight changeront leur couleur de fond en jaune :
element.nativeElement.style.backgroundColor = ‘yellow’;
Â
Ecouter les événements du DOM
Pour Ă©couter les Ă©vĂ©nements sur lâĂ©lement, nous allons rajouter un attribut, qui sera un attribut de mĂ©thode : HostListener.
Nous importons lâattribut qui va dĂ©corer nos mĂ©thodes :
import { ElementRef, Directive, HostListener } from ‘@angular/core’;
Ce qui va nous permettre de nous attacher aux événements :
@HostListener(« mouseleave »)
onMouseLeave() {
 this._element.nativeElement.style.border = « inherit »;
}
Passons maintenant Ă la personnalisation de notre directive
Grùce au décorateur Input, nous allons pouvoir rendre paramétrable un attribut de la classe de la directive. Et donc, nous pourrons renseigner cette valeur depuis le html de la Vue.
@Input() // if we need to change the name @Input(‘newName’)
borderColor: string;
Ici borderColor devient une propriĂ©tĂ© qui va ĂȘtre paramĂ©trable cĂŽtĂ© HTML.
<div appHighlight borderColor= »green » *ngFor= »let oneClone of clones » class= »row » >
Super, on a déjà bien avancé sur un outil bien pratique pour appliquer des comportements, du style à chacun de nos contrÎles DOM.
Prochaine étape : on va organiser nos routes, pour avoir plusieurs pages.