647 字
2 分钟
Vue2 项目 vue-router@3.6.5 完整配置教程
Vue2 项目 vue-router@3.6.5 完整配置教程
一、环境说明
- 项目环境:Vue-CLI 搭建的 Vue2 项目
- 路由版本:vue-router@3.6.5(核心适配规则:Vue2 仅支持 3.x 版本,4.x 版本专为 Vue3 适配,不可混用)
二、安装指定版本路由
打开项目终端,执行对应包管理命令安装固定版本路由:
1. npm 安装
npm install vue-router@3.6.5 --save2. yarn 安装
yarn add vue-router@3.6.5三、创建标准工程化路由目录
在项目 src 目录下新建对应文件夹及文件,遵循前端工程化规范,完整目录结构如下:
src/├── router/ # 路由核心目录│ └── index.js # 路由配置入口文件├── views/ # 页面级组件目录│ ├── Home.vue # 首页组件│ ├── Login.vue # 登录页组件│ └── NotFound.vue # 404兜底页面组件├── components/ # 公共小组件目录├── App.vue # 根组件└── main.js # 项目入口文件四、router/index.js 完整配置(通用工程化模板)
该配置包含路由报错修复、懒加载、重定向、全局路由守卫、环境适配等企业级常用配置,可直接复用:
import Vue from 'vue'import VueRouter from 'vue-router'
// 解决 vue-router3 重复点击路由控制台报错问题const originalPush = VueRouter.prototype.pushVueRouter.prototype.push = function push(location) { return originalPush.call(this, location).catch(err => err)}
const originalReplace = VueRouter.prototype.replaceVueRouter.prototype.replace = function replace(location) { return originalReplace.call(this, location).catch(err => err)}
// 全局注册路由插件Vue.use(VueRouter)
// 路由规则配置const routes = [ { path: '/', redirect: '/home' // 根路径重定向至首页 }, { path: '/home', name: 'Home', component: () => import('@/views/Home.vue') // 路由懒加载,优化打包体积 }, { path: '/login', name: 'Login', component: () => import('@/views/Login.vue') }, // 404 兜底路由,必须放置在所有路由最后 { path: '*', component: () => import('@/views/NotFound.vue') }]
// 创建路由实例const router = new VueRouter({ mode: 'history', // history模式:地址无#号;hash模式:带#号,本地打开无需后端配置 base: process.env.BASE_URL, // 适配Vue-CLI内置环境变量,兼容打包部署路径 routes})
// 全局前置路由守卫(项目鉴权核心)router.beforeEach((to, from, next) => { // to:即将跳转的目标路由对象 // from:当前离开的路由对象 // next:路由放行函数,必须执行 const token = localStorage.getItem('token') // 未登录时,拦截所有非登录页面请求,强制跳转登录页 if (to.path !== '/login' && !token) { next('/login') } else { next() }})
export default router五、main.js 引入并挂载路由
在项目入口文件引入路由并全局挂载,挂载后全局可使用 $router(路由实例)、$route(路由参数):
import Vue from 'vue'import App from './App.vue'// 导入自定义路由配置import router from './router'
Vue.config.productionTip = false
// 挂载路由到Vue实例new Vue({ router, render: h => h(App)}).$mount('#app')六、App.vue 配置路由出口与导航
<router-view> 为路由页面渲染出口,是路由生效的必备节点;<router-link> 替代原生 a 标签,实现页面无刷新跳转:
<template> <div id="app"> <!-- 页面导航菜单 --> <router-link to="/home">首页</router-link> <router-link to="/login">登录页</router-link>
<!-- 路由页面渲染出口(必不可少) --> <router-view></router-view> </div></template>
<script>export default { name: 'App'}</script>七、页面组件编程式路由跳转(JS 控制)
在任意.vue 组件中,可通过 JS 代码实现灵活路由跳转,适配业务场景:
// 1. 字符串路径跳转(简单场景)this.$router.push('/home')
// 2. 命名路由跳转(推荐,修改路径不影响跳转逻辑)this.$router.push({ name: 'Home' })
// 3. 命名路由带参数跳转(params传参)this.$router.push({ name: 'Detail', params: { id: 1001 } })
// 4. 替换当前页面(无历史记录,无法返回上一页)this.$router.replace('/login')
// 5. 页面回退(-1=返回上一页,-2=返回上两页)this.$router.go(-1)八、工程化常用拓展配置
8.1 嵌套路由(后台管理系统核心用法)
适用于页面嵌套布局场景(如后台侧边栏+主体内容),修改 routes 路由规则:
const routes = [ // 省略基础路由... { path: '/admin', name: 'Admin', component: () => import('@/views/Admin.vue'), // 子路由配置(子路由path无需加/) children: [ { path: 'user', component: () => import('@/views/admin/User.vue') }, { path: 'order', component: () => import('@/views/admin/Order.vue') } ] }]注意:父页面Admin.vue 中必须添加 <router-view>,用于承载子路由页面,否则子页面无法渲染。
8.2 history 模式打包 404 解决方案
路由开启 history 模式后,项目打包部署至服务器,刷新页面会出现 404 错误(本地开发无此问题),解决方案:
- Nginx 服务器:配置
try_files规则,将所有请求重定向到index.html - Apache、Tomcat:配置页面重定向规则,统一拦截404请求指向项目入口文件
九、项目配置验证
执行项目启动命令,验证路由配置是否生效:
npm run serve启动项目后,切换页面导航,若实现无刷新页面跳转、地址栏正常变化、404页面正常兜底、未登录拦截生效,则代表路由配置完成。
Vue2 项目 vue-router@3.6.5 完整配置教程
http://www.linyuan0512.top/posts/vue2-项目-vue-router365-完整配置教程/ 部分信息可能已经过时









