
<ng-content> permet de créer des composants génériques et réutilisables.
Pourquoi créer plusieurs composants alors qu'on pourrait tout faire dans un seul ?
Lorsqu'on découvre Angular, une question revient souvent : pourquoi créer un composant
parent et un composant enfant alors que toutes les données sont souvent créées dans le
composant parent ? Dans les exemples de cours, il est vrai que les données sont
généralement écrites directement dans le composant parent pour simplifier l'apprentissage.
Cela peut donner l'impression que la communication entre composants est inutile et que tout
pourrait être réalisé dans un seul composant.
En réalité, ces exemples sont volontairement simplifiés. Dans une application professionnelle,
les données ne sont presque jamais créées directement dans un composant. Elles proviennent
généralement d'une base de données, d'une API REST ou d'un service Angular. Le composant
parent récupère ces données puis les distribue aux différents composants enfants qui sont
chargés de les afficher.
Cependant, la véritable raison de créer plusieurs composants n'est pas uniquement le partage
des données. L'objectif principal est de séparer les responsabilités. Chaque composant doit
avoir une mission bien précise. Par exemple, un composant peut être chargé de récupérer la
liste des étudiants, un autre d'afficher la fiche d'un étudiant, un autre encore de gérer la barre
de recherche ou la pagination. Cette organisation rend l'application plus claire, plus facile à
comprendre, plus simple à maintenir et permet de réutiliser les mêmes composants à plusieurs
endroits.
Prenons l'exemple d'une application de gestion des étudiants. Le composant
ListeStagiairesComponent récupère la liste complète des stagiaires depuis un service. En
revanche, il ne s'occupe pas de l'affichage détaillé de chaque stagiaire. Cette tâche est confiée
au composant CarteStagiaireComponent, qui est uniquement responsable de l'affichage
d'une carte. Si demain on souhaite afficher les stagiaires sur une autre page de l'application, il
suffira de réutiliser CarteStagiaireComponent sans avoir à recopier son code.
Une fois que l'application est découpée en plusieurs composants, ceux-ci deviennent
indépendants. Ils doivent alors échanger des informations pour fonctionner ensemble. C'est
précisément à ce moment qu'interviennent input() et output(). Le composant parent transmet
des données à l'enfant grâce à input(), tandis que le composant enfant informe son parent
qu'une action a été réalisée grâce à output().
On peut comparer cela au fonctionnement d'une entreprise. Le directeur pourrait effectuer lui-
même toutes les tâches, mais ce serait inefficace. Il répartit donc le travail entre plusieurs
services : les ressources humaines, la comptabilité, le service commercial, etc. Chaque service
possède une responsabilité bien définie. Comme ils travaillent ensemble, ils doivent
communiquer en permanence. Angular fonctionne exactement selon le même principe : les
composants sont spécialisés, puis ils communiquent lorsqu'ils en ont besoin.
En conclusion, les composants ne sont pas créés pour communiquer entre eux. Ils sont
créés pour découper l'application en plusieurs parties ayant chacune une responsabilité
précise. La communication avec input() et output() n'est qu'une conséquence de cette
séparation. C'est cette architecture qui permet de développer des applications Angular
professionnelles, modulaires, réutilisables et faciles à faire évoluer.