Vue Router 路由管理完全指南
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理器,它与 Vue.js 核心深度集成,让构建单页面应用变得易如反掌。
安装与基本设置
1 2 3 4 5
| npm install vue-router@4
yarn add vue-router@4
|
基本配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import { createRouter, createWebHistory } from 'vue-router' import Home from '../views/Home.vue' import About from '../views/About.vue'
const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About } ]
const router = createRouter({ history: createWebHistory(), routes })
export default router
|
在 main.js 中使用:
1 2 3 4 5
| import { createApp } from 'vue' import App from './App.vue' import router from './router'
createApp(App).use(router).mount('#app')
|
路由导航组件
1 2 3 4 5 6 7 8 9
| <template> <div> <router-link to="/">首页</router-link> <router-link to="/about">关于</router-link> <!-- 路由出口 --> <router-view></router-view> </div> </template>
|
动态路由匹配
1 2 3 4 5 6 7
| const routes = [ { path: '/user/:id', name: 'User', component: User } ]
|
在组件中获取参数:
1 2 3 4 5 6
| <script setup> import { useRoute } from 'vue-router'
const route = useRoute() console.log(route.params.id) </script>
|
嵌套路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const routes = [ { path: '/user/:id', component: User, children: [ { path: 'profile', component: UserProfile }, { path: 'posts', component: UserPosts } ] } ]
|
编程式导航
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import { useRouter } from 'vue-router'
const router = useRouter()
router.push('/about')
router.push({ name: 'User', params: { id: '123' } })
router.push({ path: '/search', query: { q: 'vue' } })
router.go(-1) router.go(1)
|
路由守卫
全局前置守卫
1 2 3 4 5 6 7 8
| router.beforeEach((to, from, next) => { if (to.meta.requiresAuth && !isAuthenticated) { next('/login') } else { next() } })
|
路由独享守卫
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const routes = [ { path: '/admin', component: Admin, beforeEnter: (to, from, next) => { if (hasAdminRights) { next() } else { next('/403') } } } ]
|
组件内守卫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <script> export default { beforeRouteEnter(to, from, next) { // 在渲染该组件的对应路由被验证前调用 next(vm => { // 通过 vm 访问组件实例 }) }, beforeRouteUpdate(to, from, next) { // 当前路由改变,但该组件被复用时调用 next() }, beforeRouteLeave(to, from, next) { // 导航离开该组件对应的路由时调用 next() } } </script>
|
路由元信息
1 2 3 4 5 6 7 8 9 10 11
| const routes = [ { path: '/admin', component: Admin, meta: { requiresAuth: true, title: '管理后台', permissions: ['admin'] } } ]
|
懒加载路由
1 2 3 4 5 6 7
| const routes = [ { path: '/about', name: 'About', component: () => import('../views/About.vue') } ]
|
滚动行为
1 2 3 4 5 6 7 8 9 10 11
| const router = createRouter({ history: createWebHistory(), routes, scrollBehavior(to, from, savedPosition) { if (savedPosition) { return savedPosition } else { return { top: 0 } } } })
|
提示:Vue Router 是构建单页应用的核心工具,掌握它可以让你的应用导航更加灵活和强大。