Angular 15 - Découvrons la composition de Directives avec hostDirectives

Nous continuons notre dĂ©couverte des nouveautĂ©s d’Angular 15 et de la standalone API, avec la composition de directives.

Les directives, essentielles dans votre code

Vous le savez, pour bien factoriser notre code de template, et certains comportements, il va ĂȘtre essentiel d’utiliser les Directive.

A force d’en crĂ©er, vous aurez remarquĂ© qu’on va crĂ©er de l’hĂ©ritage … et ça peut vite devenir un mĂ©lange, peu fiable et peu propre de directives parentes, enfantes ..

Un standalone component qui va appeler une host directive

Prenons une directive qui s’applique sur la totalitĂ© de notre component.

@Directive({
  selector: '[appChangeColor]',
  host: { 'style': 'color: red'},
  standalone: true
})
export class ChangeColorDirective {

  constructor() { }

}

Vous remarquez ici un point essentiel : la directive doit ĂȘtre standalone !

En dĂ©cidant de l’appeler depuis le nouvel attribut hostDirective, on va permettre de l’injecter, et aussi de l’instancier, pour chaque composant.

@Component({
  selector: 'app-main',
  standalone: true,
  imports: [
    RouterModule,
    ChildOneComponent,
    MenuGlobalComponent,
    TestColorDirective
    //TestColorModule
  ],
  templateUrl: './main.component.html',
  styleUrls: ['./main.component.css'],
  hostDirectives: [
    ChangeColorDirective
  ]
})
export class MainComponent {}

Elle sera appliquée pour la totalité de notre composant.

Un composant se composant de plusieurs directives host

Que se passe-t-il si l’on veut appliquer deux directives en mĂȘme temps ?

Avec hostDirectives, on va pouvoir composer avec ses deux directives :

 hostDirectives: [
    ChangeColorDirective,
    HeightSizeDirective
  ]

Une directive qui se compose de directives

On peut aller plus loin !

L’idĂ©e ici c’est de factoriser l’appel de plusieurs directives, via une directive qui les appellent toutes (un anneau unique en somme).

Vive la composition :

@Directive({
  selector: '[appChangeColorHeight]',
  standalone: true,
  hostDirectives: [
    ChangeColorDirective,
    HeightSizeDirective
  ]
})
export class ChangeColorHeightDirective {

  constructor() { }

}

Et c’est lĂ  que c’est maginifique !

Il suffit d’appeler la directive appelante dans le composant :

hostDirectives: [
    ChangeColorHeightDirective,
]

Reste à découvrir les input et ouput composites. Nous en reparlons trÚs prochainement !

Yes, ça attire ta curiosité ?

Tu souhaites aller plus loin en Angular ?

Notre adresse

1 rue du guesclin
44000 Nantes

Notre téléphone

+33 2 79 65 52 87

Société

DevToBeCurious SARL
84860163900018 - Nantes B 848 601 639