Les guàrdies de navegació són una característica poderosa de Vue Router que permet controlar l'accés a les rutes de la teva aplicació. Aquestes guàrdies poden ser utilitzades per verificar permisos, autenticar usuaris, carregar dades abans de renderitzar una ruta, entre altres coses.
Tipus de guàrdies de navegació
Hi ha diversos tipus de guàrdies de navegació en Vue Router:
- Guàrdies globals: S'apliquen a totes les rutes.
- Guàrdies de ruta: S'apliquen a rutes específiques.
- Guàrdies de components: S'apliquen a components específics.
Guàrdies globals
Les guàrdies globals es defineixen directament en la instància de Vue Router. Hi ha tres tipus de guàrdies globals:
beforeEach
: S'executa abans que es resolgui cada ruta.beforeResolve
: S'executa després que es resolguin totes les guàrdies de la ruta i els components.afterEach
: S'executa després que la navegació s'hagi completat.
Exemple de beforeEach
const router = new VueRouter({ routes: [ // les teves rutes aquí ] }); router.beforeEach((to, from, next) => { // `to` és la ruta a la qual es vol navegar // `from` és la ruta des de la qual es ve // `next` és una funció que s'ha de cridar per continuar la navegació if (to.meta.requiresAuth && !isAuthenticated()) { // Si la ruta requereix autenticació i l'usuari no està autenticat next('/login'); // Redirigeix a la pàgina de login } else { next(); // Continua la navegació } });
Guàrdies de ruta
Les guàrdies de ruta es defineixen directament en les rutes individuals. Hi ha dos tipus de guàrdies de ruta:
beforeEnter
: S'executa abans que es resolgui la ruta.beforeLeave
: S'executa abans que es deixi la ruta.
Exemple de beforeEnter
const routes = [ { path: '/dashboard', component: Dashboard, beforeEnter: (to, from, next) => { if (!isAuthenticated()) { next('/login'); } else { next(); } } } ];
Guàrdies de components
Les guàrdies de components es defineixen dins dels components mateixos. Hi ha tres tipus de guàrdies de components:
beforeRouteEnter
: S'executa abans que es resolgui la ruta.beforeRouteUpdate
: S'executa quan la ruta canvia però el component es reutilitza.beforeRouteLeave
: S'executa abans que es deixi la ruta.
Exemple de beforeRouteEnter
export default { name: 'Dashboard', beforeRouteEnter(to, from, next) { if (!isAuthenticated()) { next('/login'); } else { next(); } } };
Exercicis pràctics
Exercici 1: Guàrdia global de navegació
- Crea una aplicació Vue amb Vue Router.
- Defineix una guàrdia global
beforeEach
que redirigeixi a/login
si l'usuari no està autenticat i intenta accedir a una ruta que requereix autenticació.
Solució
const router = new VueRouter({ routes: [ { path: '/login', component: Login }, { path: '/dashboard', component: Dashboard, meta: { requiresAuth: true } } ] }); router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated()) { next('/login'); } else { next(); } });
Exercici 2: Guàrdia de ruta
- Defineix una ruta
/admin
que només sigui accessible per usuaris amb rol d'administrador. - Utilitza una guàrdia de ruta
beforeEnter
per verificar el rol de l'usuari.
Solució
const routes = [ { path: '/login', component: Login }, { path: '/admin', component: Admin, beforeEnter: (to, from, next) => { if (getUserRole() !== 'admin') { next('/login'); } else { next(); } }} ];
Exercici 3: Guàrdia de component
- Defineix un component
Profile
que només permeti la navegació si l'usuari està autenticat. - Utilitza la guàrdia de component
beforeRouteEnter
per verificar l'autenticació.
Solució
export default { name: 'Profile', beforeRouteEnter(to, from, next) { if (!isAuthenticated()) { next('/login'); } else { next(); } } };
Resum
Les guàrdies de navegació són una eina essencial per controlar l'accés a les rutes de la teva aplicació Vue.js. Amb les guàrdies globals, de ruta i de components, pots assegurar-te que els usuaris només accedeixin a les pàgines permeses i que es compleixin les condicions necessàries abans de renderitzar una ruta. Practica amb els exercicis proporcionats per consolidar els teus coneixements sobre les guàrdies de navegació en Vue Router.
Curs de Vue.js
Mòdul 1: Introducció a Vue.js
- Què és Vue.js?
- Configuració de l'entorn de desenvolupament
- Creant la teva primera aplicació Vue
- Entenent la instància de Vue
Mòdul 2: Conceptes bàsics de Vue.js
- Sintaxi de plantilles
- Enllaç de dades
- Propietats computades i observadors
- Enllaços de classes i estils
- Renderització condicional
- Renderització de llistes
Mòdul 3: Components de Vue.js
- Introducció als components
- Props i esdeveniments personalitzats
- Slots
- Components dinàmics i asíncrons
- Comunicació entre components
Mòdul 4: Vue Router
- Introducció a Vue Router
- Configuració de Vue Router
- Rutes dinàmiques
- Rutes niades
- Guàrdies de navegació
Mòdul 5: Gestió d'estat amb Vuex
- Introducció a Vuex
- Estat, getters, mutacions i accions
- Mòduls a Vuex
- Utilitzant Vuex en components
- Patrons avançats de Vuex
Mòdul 6: Directives de Vue.js
Mòdul 7: Plugins de Vue.js
Mòdul 8: Proves en Vue.js
Mòdul 9: Conceptes avançats de Vue.js
- Funcions de renderització i JSX
- Renderització del costat del servidor (SSR) amb Nuxt.js
- API de composició de Vue 3
- Optimització del rendiment