Mise en Place du Routing
1. Tag base
base
Avant toute chose, il est nécessaire d'ajoute le tag base
au head
du fichier index.html
de l'application :
Ce tag indique la base du path
à partir de laquelle le "Routing" Angular rentre en jeu.
Cette valeur est généralement personnalisé dans le cas où plusieurs applications Angular sont hébergées sur un même nom de domaine mais avec des path
s différents.
2. Configuration
Configuration du "Routing"
La configuration du "Routing" est transmise au module RouterModule
lors de son import par le "root module" AppModule
.
Par bonne pratique, il est recommandé de placer cette configuration dans un module dédié AppRoutingModule
importé par le "root module" AppModule
.
`` est une "wildcard"** qui "match" toutes les urls (sauf celles qui ont "match" les routes précédentes).
Il faut donc faire attention à l'ordre des "routes".
Configuration d'une "Route" avec Paramètres
Le path
d'une "route" peut définir des paramètres obligatoires grâce au préfixe :
.
Configuration de l'Hébergement
3. <router-outlet>
<router-outlet>
La configuration du "Routing" permet de définir quel composant afficher en fonction de la route mais cela n'indique pas à Angular où injecter le composant dans la page.
Pour indiquer l'emplacement d'insertion du composant, il faut utiliser la directive <router-outlet>
directement dans le "root component" AppComponent
(ou dans un "child component" dédié, e.g. HomeLayoutComponent
).
En fonction de la "route" visitée, le composant associé sera alors injecté en dessous du tag router-outlet
(et non à l'intérieur ou à la place du tag contrairement à ce que l'on pourrait supposer).
4. Création de liens
En utilisant des liens natifs <a href="/search">
, le "browser" va produire une requête HTTP GET
vers le serveur et recharger toute l'application.
Pour éviter ce problème, le module de "Routing" Angular fournit la directive routerLink
qui permet d'intercepter l'événement click
sur les liens et de changer de "route" sans recharger toute l'application.
Construction Dynamique
Construction avec Paramètres
La "route" /books/123
peut être construite avec des paramètres :
où book.id = '123'
.
5. Accès aux Paramètres
Le service ActivatedRoute
décrit l'état actuel du "router".
Il permet au composant associé à la "route" de récupérer les paramètres via les propriétés paramMap
et queryParamMap
.
Pour simplifier la récupération des paramètres, il est également possible d'utiliser la propriété snapshot
qui contient l'état actuel de la route (e.g. : snapshot.paramMap.get('bookId')
). Le risque dans ce cas est de ne pas mettre à jour la vue en cas de navigation vers la même route avec des paramètres différents.
6. Router
Service
Router
ServiceLe Router
est le service principal du "Routing". Il permet de :
déclencher la navigation via la méthode
navigate
,this._router.navigate(['/books', bookId], {queryParams: {}})
suivre les événements de navigation via l'
Observable
router.events
,construire et parser les urls de "Routing",
vérifier si une "Route" est actuellement visitée,
...
Dernière mise à jour