20-1 Composant d'affichage des issues sur la page d'un projet
Pour afficher les issues de projet, on créera un composant acceptant en entrée (@Input()
) un identifiant de projet.
-
Créer le composant
issues-list
viaAngular CLI
**dans son propre dossier defeature
. En effet, on parle d'une fonctionnalité distincte liée aux issues. Bien sûr que le tout est dans le contexte de projets, mais il s'agit d'une fonctionnalité distincte.ng g component features/issues/components/issues-liste
infoLes dossiers manquants seront créés automatiquement pour vous 🙂
-
Ajouter le
Input()
pour le id de projet (projetId
).src/app/features/issues/components/issues-liste.tsexport class IssuesListe {
@Input() projetId: string | null = null;
} -
Modifier le contenu du composant afin d'afficher temporairement simplement l'identifiant du projet.
src/app/features/issues/components/issues-liste.ts@Component({
selector: 'app-issues-liste',
imports: [],
template: `
<h2>Issues</h2>
<p>La liste des issues pour le projet {{projetId}} sera affichée ici.</p>
`,
styles: ``
})
export class IssuesListe {
@Input() projetId: number | null = null;
} -
Préparer le terrain pour l'initialisation avec
OnInit
export class IssuesListe implements OnInit {
@Input() projetId: number | null = null;
async ngOnInit() {
// Initialisation, ex.: appeler un service `IssueService` pour récupérer les issues du projet
}
}attentionDans un cas réel, on appelerait un service comme
IssueService
pour récupérer la liste des issues associées au projet. -
Intégrer
issues-liste
dansprojet-detail
.src/app/features/projets/pages/projet-detail.ts@Component({
selector: 'app-projet-detail',
imports: [
RouterLink,
IssuesListe
],
template: `
@if (projet) {
<div class="row">
<div class="col-lg-8">
<h1>{{projet.nom}}</h1>
</div>
<div class="col-lg-4 d-flex align-items-center justify-content-lg-end">
<a class="btn btn-secondary" [routerLink]="['/projets', projet.id, 'modifier']">Modifier</a>
</div>
</div>
<div class="row mt-3">
<div class="col">
<p>{{projet.description}}</p>
</div>
</div>
<div class="row mt-3">
<div class="col">
<app-issues-liste [projetId]="projet.id"></app-issues-liste>
</div>
</div>
}
`,
styles: ``
})
Vous devriez maintenant avoir quelque chose comme ceci lorsque vous vous rendez sur la page de détail d'un projet: