Aller au contenu principal

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:

src/app/features/projets/pages/projets-index.ts
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é.

src/app/core/http/api.ts
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.

Img

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.

src/app/features/projets/pages/projets-index.ts
@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:

http://localhost:4200

img