Chap 5 : Gestion de la navigation via les…
Nous avons vu au chapitre précédent, l’ajout de deux composants dans notre application web, dont un menu de navigation. On va souhaiter maintenant de pouvoir nous balader à travers notre app pour afficher tel ou tel composant. Le code source du projet est disponible ici sur Github.
Routing entre component
On va commencer par créer deux nouveaux composants pour correspondre à nos deux onglets du menu :
ng generate component acheter
ng generate component vendre
Automatiquement, ces deux composants vont être déclarés dans notre app.module.ts.
On va créer deux alias pour deux routes différentes dans notre nav bar qui permettront de rediriger vers un composant :
On va aller ajouter cette redirection de route dans notre fichier app-routing.module.ts. On ajoute aussi l’import de nos deux composants. Quand au fichier de routing, celui ci est crée lors de la création du module si vous ajoutez l’attribut --routing
.
On va dire de charger tel ou tel composant selon l’alias renvoyé par notre nav bar :
Redirection d’une route
Une chose qui peut être intéressant, c’est de pouvoir rediriger une route vers un composant spécifique. Par exemple, au démarrage de l’application, on souhaite charger par défaut un onglet spécifique. Nous allons ajouter une directive de redirection dans le fichier app-routing.module.ts comme cela :
On est alors automatiquement redirigé lorsque l’on ouvre localhost:4200 vers localhost:4200/acheter, avec le composant ‘acheter’ d’ouvert :
Routing pour entre module
On va créer un nouveau module pour imager notre navigation entre module :
ng generate module login --routing
Ainsi que trois nouveaux composants :
ng generate component inscription
ng generate component connexion
ng generate component login
On va se service de login pour créer une seconde nav bar, nous permettant de naviguer au seins du module Login pour nous permettre de choisir entre la page d’inscription et de connexion.
On ajoute le nouvel onglet à notre nav bar principal:
On ajoute la nav bar secondaire :
N’oubliez pas d’ajouter dans le constructeur de login.component.ts, les items du sous menu :
La balise <router-outlet></router-outlet> va nous permettre d’inclure le code HTML des enfants dynamiquement, soit login/connexion ou login/inscription à tout moment lors de la navigation.
Il nous reste plus qu’a ajouter les routes des enfants du module Login dans notre fichier de routing principal qui est dans le module app :
Lazy loading, ou chargement à la demande
Au fur et à mesure que vous ajoutez des fonctionnalités à votre application, il se peut que celle-ci prennent de plus en plus de temps à s’ouvrir. En effet, c’est lors du démarrage que l’ensemble des pages sont récupérés, que les objets sont construits, etc. Afin d’alléger cette phase, on peut donner une nouvelle directive à angular, lui demandant de charger les modules à la demande seulement. Ces composants ou modules ne seront donc crée que lorsque l’un de ses composant sera appelé lors de la navigation.
Premièrement on va modifier notre appel à notre module Login dans le fichier de routing principal de notre application :
Ensuite, on a juste à donner les nouvelles routes au sein du module enfant :
Pre loading
Nous venons de voir comment charger nos modules séparément et à la demande. On peut encore optimiser ces temps de chargement au démarrage.
En effet, une fois le module principal chargé, on pourrait demander à Angular de pouvoir pré-charger en arrière plan les autres modules de l’application, alors même que l’utilisateur peut dors et déjà interagir avec le module principal de l’application. Cela permettra ainsi d’avoir une navigation quasi instantané des autres modules.
Pour cela, on va modifier la stratégie de pré-chargement dans le fichier de routing principale de l’application :