Le décorateur ContentChildren
dans Angular est un outil puissant qui souvent n'est pas bien compris ou est sous-utilisé par beaucoup de développeurs. Contrairement aux idées reçues, le but de ContentChildren
n'est pas de lier des données aux composants enfants, d'interroger le DOM dans le template ou de créer des emplacements de projection de contenu. Le véritable objectif de ContentChildren
est de permettre à un composant parent d'accéder à ses composants ou directives enfants.
ContentChildren
dans Angular ?Dans le cœur d'Angular, ContentChildren
est un décorateur de propriété qui vous permet d'accéder aux instances de composants enfants ou de directives depuis le composant parent. Ces instances sont disposées en QueryList
.
Voici un exemple pratique illustrant son fonctionnement :
import { Component, ContentChildren, QueryList, AfterContentInit } from '@angular/core';
import { EnfantComponent } from './enfant.component';
@Component({
selector: 'app-parent',
template: `<ng-content></ng-content>`,
})
export class ParentComponent implements AfterContentInit {
@ContentChildren(EnfantComponent)
enfants: QueryList<EnfantComponent>;
ngAfterContentInit() {
this.enfants.forEach(enfant =>
console.log(enfant);
);
}
}
Dans le code ci-dessus, nous utilisons ContentChildren
dans le composant parent pour accéder aux instances du composant enfant. Puis, nous affichons chaque instance de composant enfant dans la console lors de l'initialisation du composant parent.
ContentChildren
Il est toujours bon de comprendre la différence entre ContentChildren
et ViewChildren
. Tandis que ViewChildren
ne fait référence qu'aux enfants dans le template du composant, ContentChildren
tient compte des enfants dans le contenu projeté.
Faites attention à l'instant où vous accédez à ContentChildren
. Comme pour ViewChildren
, ils ne sont pas disponibles avant le hook de cycle de vie ngAfterContentInit
.
Finalement, le décorateur ContentChildren
est un outil extrêmement utile qui permet de garder une certaine flexibilité et une organisation claire de votre code lorsque vous travaillez avec des composants imbriqués. Utilisez-le correctement et votre code Angular sera bien plus propre et plus facile à gérer.