24-1 Gérer une erreur localement dans le composant
Une première approche est de faire la gestion d'erreur à la pièce, au niveau du composant.
Pour cela, on peut englober l'appel au service dans un try/catch
:
async ngOnInit(): Promise<void> {
try {
this.projets = await this.projetService.obtenirTous();
} catch (error) {
console.error(error);
}
}
Générer une erreur
Pour générer une erreur, vous pourriez mettre en commentaire votre jeton d'authentification. Ainsi, les requêtes vont échouer parce que vous n'êtes pas authentifié.
api.interceptors.request.use((config: any) => {
//config.headers['apiKey'] = 'VOTRE_CLE';
return config;
});
Vous pourriez aussi modifier l'URL appelée dans le service pour que l'adresse n'existe pas et ainsi générer une erreur.
Cela devrait générer une erreur et puisque via try/catch
on log
l'erreur en utilisant console.error
, vous aurez l'erreur affichée dans la console.
Afficher un message plutôt que console.error
Il pourrait être pertinent d'afficher un message d'erreur dans l'éventualité où une erreur survient lors d'un appel au service.
Pour cela, on peut ajouter une propriété msgErreur
au composant, liée à une boîte d'erreur dans le HTML et assigner un message à msgErreur
dans l'éventualité d'une erreur.
On peut utiliser la classe Bootstrap alert alert-danger
afin de facilement afficher une boîte ayant le style d'un message d'erreur.
@Component({
selector: 'app-projets-index',
imports: [
ProjetsListe,
RouterLink
],
template: `
<div class="row mb-3 mt-3">
<div class="col-lg-9"><h1>Projets</h1></div>
<div class="col-lg-3 d-flex align-items-center justify-content-end">
<a class="btn btn-primary" routerLink="/projets/creer">Nouveau projet</a>
</div>
</div>
@if(msgErreur) {
<div class="alert alert-danger mb-3">
{{msgErreur}}
</div>
}
<app-projets-liste [projets]="projets" (projetDeleted)="gestionProjetDeleted($event)"></app-projets-liste>
`,
styles: ``
})
export class ProjetsIndex implements OnInit {
protected projets: Projet[] | null = null
protected msgErreur?: string;
constructor(private projetService: ProjetService) {}
async ngOnInit(): Promise<void> {
try {
this.projets = await this.projetService.obtenirTous();
} catch (error) {
this.msgErreur = "Une erreur est survenue lors du chargement des projets."
}
}
//...
Ce qui vous permettra d'obtenir: