Créer des applications à page unique avec une navigation fluide peut être complexe sans un outil adapté.
Les développeurs rencontrent souvent des défis liés au routage dynamique et aux transitions, ce qui peut nuire à l’expérience utilisateur.
Vue Router simplifie ces tâches en offrant des fonctionnalités puissantes pour gérer le routage et les transitions dans Vue.js, assurant une navigation optimale.
Acquérez les compétences fondamentales pour créer des applications avec Vue JS 3!
Vue Router : Présentation essentielle
Vue Router est le routeur officiel de Vue.js. Il s’intègre profondément au cœur de Vue.js pour faciliter la création d’applications à page unique avec Vue.js. Les fonctionnalités incluent:
- Cartographie des itinéraires imbriqués
- Routage dynamique
- Configuration de routeur modulaire basée sur des composants
- Paramètres de route, requête, caractères génériques
- Afficher les effets de transition optimisés par le système de transition de Vue.js
- Contrôle de navigation précis
- Liens avec les classes CSS actives automatiques
- Mode historique HTML5 ou mode hachage
- Comportement de défilement personnalisable
- Encodage approprié pour les URL
Pour l’installer, ouvrir le terminal. Et suivre ces étapes :
Choisir « manually »,
Séléctionner « babel » et « router »,
Et suivre les instructions qui se suivent
Une fois l’installation est finie, ouvrir l’application
La route « Home »
La route « About »
Par défaut nous devons trouver ceci dans App.vue :
//un espace réservé où le composant correspondant à la route actuelle sera rendu
Puis ajoutons dans le balise <nav> ces contenus ainsi que le style pour obtenir une barre de navigation.
Dans main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app') // .use(router):indique à l’application d’utiliser le router défini.
Router -> index.js
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'// importer le composant de vue pour la route d’accueil.
/* createRouter : fonction de vueJs pour créer une nouvelle instance de router.
createWebHistory : pour configurer l’historique de navigation */
const routes = [
{
path: '/', //spécifie le chemin de l’URL pour la route
name: 'home', //donne un nom à la route
component: HomeView //spécifie quel composant afficher lorsque l’URL correspond à cette route
},
{
path: '/about',
name: 'about',
component: () => import'../views/AboutView.vue')
}
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
AboutView.vue: un view par défaut de vue router
This is an about page
HomeView.vue
Le rendu est :
Routage multiple avec Vue Router
Créons les 03 nouveaux views ci-après
KfcView.vue
KFC
McdoView.vue
Mcdo
BurgerKingView.vue
Burger King
Dans HomeView.vue, ajoutons ceci
//génère dynamiquement le chemin de l’image à partir du nom du fichier menu.image
{{menu.name}}
//affiche le nom du menu dans un titre de carte.
Puis dans Index.js
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import McdoView from '../views/McdoView.vue'
import KfcView from '../views/KfcView.vue'
import BurgerKingView from '../views/BurgerKingView.vue'
// important des composants qui seront utilisés comme vue pour différentes routes
const routes = [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/menu-mcdo',
name: 'mcdo', //cette route est nommée « mcdo »
component: McdoView
},
{
path: '/menu-kfc',
name: 'kfc',
component: KfcView
},
{
path: '/menu-burger-king',
name: 'bk',
component: BurgerKingView
},
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
Mode History dans Vue Router
Pour mieux comprendre le mode History avec Vue Router, rendez-vous sur son site officiel Vue Documentation puis scrollez jusqu’à trouver « Different History modes »
Vue Router comprends deux (02) types de mode History :
Lazy loading : Import dynamique Vue
Rendre dans index.js pour ajouter les routes du menu :
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
// import McdoView from '../views/McdoView.vue'
// import KfcView from '../views/KfcView.vue'
// import BurgerKingView from '../views/BurgerKingView.vue'
const routes = [
{
path: '/',
name: 'home',
component: HomeView
},
{
path: '/menu-mcdo',
name: 'mcdo',
component: () => import('@/views/McdoView.vue')
},
{
path: '/menu-kfc',
name: 'kfc',
component: () => import('@/views/KfcView.vue')
},
{
path: '/menu-burger-king',
name: 'bk',
component: () => import('@/views/BurgerKingView.vue')
},
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
Donc voilà l’explication :
Composant navigation avec Vue.js
Créez un composant « HeadNavigation.vue » et déplacez le balise <nav> de App.vue dedans
Puis ajuster ceci dans App.vue
//inclut le composant HeadNavigation qui contient la barre de navigation
Donc, le rendu pour la navigation ne change pas mais nous voulons juste libérer un peu le App.vue et nous pouvons appeler ce nouveau composant n’importe où.
Classes actives des liens Vue Router
Mettez dans index.js une classe pour les liens
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
linkActiveClass : "lien-actif", //spécifie la classe CSS a appliquer aux liens actifs dans la barre de navigation.Lorsqu’un lien est actif, il recevra cette classe CSS.
})
Ajoutez son style dans le composant « HeadNavigation »
Voilà le rendu :
Paramètres d'URL avec Vue Router
Créez un nouveau view « MenuView »
{{menu.name}}
// affiche le nom du menu à partir des données récupérées
{{menu.description}}
// affiche la description du menu
Dans HomeView.vue, ajoutez ce script :
Routes nommées en Vue.js
Dans index.js, ajoutez le name pour la route « id »
{
path: '/menu/:id',
name: 'menu.show',
component: () => import('@/views/MenuView.vue')
}
Dans HomeView.vue, changez le « to »
Quand nous cliquons sur un lien de la navigation, le nom de l’URL lui correspond directement
Menu dynamique et Vue Router
D’abord, commentez les routes pour Mcdo, KFC, Burger king dans « index.js »
Rendons dans HomeView
Dans le HeadNavigation, commentez les balises <li>, puis copiez là le <router-link> et le <script> de HomeView
Voilà le menu dynamique
Slug dans les paramètres URL
Ajoutez dans Index.js
{
path: '/menu/:id/:slug', //définit le modèle d’URL pour la route
name: 'menu.show',
component: () => import('@/views/MenuView.vue')
}
Dans Homeview.vue
Et HeadNavigation.vue
:to="{
name: 'menu.show',
params: {id: menu.id, slug:menu.slug}
}">
Props en routage Vue.js
Dans index.js, définir dans la route de menu la props :
{
path: '/menu/:id/:slug',
name: 'menu.show',
component: () => import('@/views/MenuView.vue'),
props:(route) => ({id: parseInt(route.params.id)}),//une fonction pour mapper les paramètres de la route en propriétés du composant. Cela signifie que l’id sera automatiquement passe en tant que propriété au composant MenuView.vue
}
Dans MenuView.vue, supprimez la fonction menu et remplacez par « props »
Le rendu est de même que le précédent.
Lister données liées en Vue.js
Créez un nouveau composant « IngredientList.vue »
{{ingredient.name}}
Dans menuView.vue :
{{menu.name}}
{{menu.description}}
Le rendu est :
Détails ingrédient avec Vue Router
Créez un nouveau view « IngredientView.vue »
{{ingredient.name}}
{{ingredient.description}}
Conclusion
L’intégration de Vue Router dans vos projets Vue.js peut transformer votre approche du routage et améliorer l’expérience utilisateur de vos applications SPA. Quelles autres fonctionnalités de Vue Router aimeriez-vous explorer pour enrichir vos applications ?