Aller au contenu principal

17-9 Redirection manuelle

Une fois la requête complétée, il serait bien de retourner à la page de liste des projets. En fait, on veut simplement quitter la page du formulaire puisque le projet a été créé.

Pour avoir accès à la navigation, on doit utiliser le système de Router. Vous savez comment l'utiliser de façon manuelle sur un lien en ajoutant la propriété routerLink, mais comment faire si on veut changer de page via le code de la composante?

Injecter une instance de Router dans ProjetCreerPage

La première étape est d'injecter une instance de la classe Router d'Angular qui donne accès aux fonctionnalités de navigation et de routing via la logique de la classe.

src/app/features/projets/pages/projet-creer.ts
constructor(private projetService: ProjetService,
private router: Router) { }

Appeler this.router.navigate une fois la réponse reçue

L'instance de Router possède une fonction navigate permettant de changer de route. Cette fonction prend en paramètre un tableau permettant de construire un chemin avec possiblement plusieurs paramètres. Exactement comme lorsqu'on utilise [routerLink].

Le tout est assez simple dans notre cas puisqu'on veut simplement rediriger vers /projets. Ainsi, on peut appeler this.router.navigate(['/projets']) pour être redirigé vers la page de liste de projets.

src/app/features/projets/pages/projet-creer.ts
protected async soumettre() {
if(this.projetForm.valid){
const valeurForm = this.projetForm.value;
const projetRequete: ProjetCreerRequete = {
nom: valeurForm.nom!,
description: valeurForm.description || undefined
}

const projet = await this.projetService.creer(projetRequete);
this.router.navigate(['/projets']);
}
info

WebStorm vous indiquera que vous devez attendre le résultat de la Promise retournée par this.router.navigate, mais vous n'avez pas à le faire puisque le résultat ne nous intéresse pas particulièrement, on veut simplement changer de page!

Level Up