Vue Router作为Vue.js官方的路由管理器,是实现单页应用页面切换、状态保持的核心工具,其配置逻辑和实践用法直接影响应用的用户体验和开发效率。理解它的运行机制和常见问题解决方案,是Vue开发者必备的技能。

Vue Router基础配置流程
使用Vue Router的第一步是完成基础配置,核心步骤包括安装依赖、定义路由规则、创建路由实例并挂载到Vue应用中。
1. 安装与初始化
首先通过npm安装Vue Router依赖,然后在项目中创建路由配置文件,定义基础的路由规则。以下是基础配置示例:
// router/index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'
Vue.use(VueRouter)
// 定义路由规则
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: About
}
]
// 创建路由实例
const router = new VueRouter({
mode: 'history', // 可选hash模式或history模式
base: process.env.BASE_URL,
routes
})
export default router
2. 挂载到Vue实例
在入口文件main.js中引入路由实例,挂载到Vue根实例上,即可让整个应用具备路由能力:
// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
new Vue({
router, // 挂载路由实例
render: h => h(App)
}).$mount('#app')
核心组件与路由实践
Vue Router提供了两个核心组件<router-link>和<router-view>,分别用于路由跳转和路由视图渲染,同时支持多种组件传参方式。
路由跳转与视图渲染
<router-link>用于生成导航链接,默认会被渲染为<a>标签,可以通过to属性指定跳转路径:
<!-- App.vue -->
<template>
<div id="app">
<!-- 导航链接 -->
<router-link to="/">首页</router-link> |
<router-link to="/about">关于我们</router-link>
<hr>
<!-- 路由视图,匹配的组件会渲染到这里 -->
<router-view/>
</div>
</template>
组件传参的三种方式
路由跳转时传递参数有三种常用方式,分别是路径参数、查询参数和props传参:
- 路径参数:在路由规则中定义动态路径,跳转时拼接参数,组件通过
this.$route.params获取 - 查询参数:跳转时在路径后拼接?key=value,组件通过
this.$route.query获取 - props传参:在路由规则中开启props,将参数作为组件属性传入,降低组件与路由的耦合度
以下是props传参的配置示例:
// 路由规则配置
const routes = [
{
path: '/user/:id',
name: 'User',
component: () => import('../views/User.vue'),
props: true // 开启props传参,将路径参数id作为组件属性
}
]
对应的User组件中可以这样接收参数:
// views/User.vue
export default {
props: {
id: {
type: String,
required: true
}
},
mounted() {
console.log('用户ID:', this.id)
}
}
进阶功能实践
路由守卫的使用
路由守卫可以在路由跳转前后执行自定义逻辑,常用于登录校验、权限控制等场景。常用的有全局前置守卫beforeEach:
// 全局前置守卫,每次路由跳转前执行
router.beforeEach((to, from, next) => {
// 假设需要登录才能访问需要权限的页面
const needAuth = to.matched.some(record => record.meta.requiresAuth)
const isLogin = localStorage.getItem('token')
if (needAuth && !isLogin) {
next('/login') // 未登录跳转到登录页
} else {
next() // 正常放行
}
})
路由懒加载
路由懒加载可以将组件按路由分割,只有当访问对应路由时才加载对应的组件代码,有效减少首屏加载时间。配置方式很简单,将组件引入改为动态import即可:
const routes = [
{
path: '/',
name: 'Home',
// 懒加载Home组件
component: () => import('../views/Home.vue')
},
{
path: '/about',
name: 'About',
// 懒加载About组件
component: () => import('../views/About.vue')
}
]
常见问题与解决方案
问题1:路由配置后页面不显示内容
这种情况通常是两个原因导致的:一是忘记在模板中添加<router-view>组件,路由匹配的组件没有渲染位置;二是路由规则的path写错,跳转路径和配置路径不匹配。排查时先检查模板中是否有<router-view>,再核对跳转路径和路由配置的path是否一致。
问题2:路由跳转后参数获取不到
如果是路径参数跳转后获取不到,需要检查路由规则中是否定义了动态路径参数,比如跳转/user/123但路由规则写的是/user,就无法匹配到参数。如果是查询参数获取不到,检查跳转时是否正确拼接了查询字符串,比如this.$router.push('/user?id=123')而不是this.$router.push('/user/123')。
问题3:history模式刷新页面404
history模式依赖HTML5的history API,需要服务端配置 fallback 规则,当访问的路径不存在时返回index.html,由前端路由接管。如果是本地开发环境,vue.config.js中需要配置devServer的historyApiFallback为true:
// vue.config.js
module.exports = {
devServer: {
historyApiFallback: true // 解决history模式刷新404问题
}
}
问题4:重复跳转相同路由报错
Vue Router 3.x版本中,重复调用this.$router.push跳转到相同路由会抛出错误,解决方案是重写push方法,捕获错误:
// 在router/index.js中添加以下代码
const originalPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => err)
}
Vue_Router路由配置组件通信路由守卫路由懒加载修改时间:2026-06-10 07:21:16