vue3+router4安装配置教程:嵌套路由、动态匹配、导航守卫、外链跳转、登录认证、自动渲染组件、生成导航菜单等
Vue Router 官方文档https://router.vuejs.org/zh/introduction.html1. 安装 vue-routernpminstallvue-router2. 在src下的文件夹router下新建文件index.js、modules.jsindex.js基础配置/* src/router/index.js */import{createRouter,createWebHistory}fromvue-router;importroutesfrom./modules;// 创建路由实例constroutercreateRouter({history:createWebHistory(),// HTML5 历史模式routes,// 载入路由模块});// 全局导航守卫router.beforeEach((to,from){// 检查是否从外链携带 token 跳转而来if(to.query.token){localStorage.setItem(token,to.query.token);// 覆盖本地已有 tokenreturn{name:home,query:{},replace:true};// 跳转主页并清除参数继续导航守卫逻辑}// 检查 token 认证if(localStorage.getItem(token)){// 若已认证成功// 路由重定向if(to.namelogin){return{name:home};// 当前已登录状态却要去登录页强制跳转主页}elseif(...){return{...};// 其他重定向逻辑}else{returntrue;// 正常放行}}else{// 若未认证判断当前是否在登录页否则跳转登录if(to.name!login){return{name:login};// 避免循环跳转}else{returntrue;}}});exportdefaultrouter;modules.js路由模块/* src/router/modules.js */// import LoginView from ../views/LoginView.vue; // 若需强制优先打开的页面可以考虑‌静态导入‌exportdefault[{path:/login,// 路径会显示在浏览器 URL 中可能需要随时修改name:LoginView,// 名称推荐固定名称用于各项操作便于统一管理component:()import(../views/LoginView.vue),// 动态导入页面懒加载// component: LoginView, // 静态导入‌},{path:/,name:HomeView,component:()import(../views/HomeView.vue),redirect:{name:databoard},// 重定向非嵌套路由可以省略 component 配置// 嵌套子路由children:[{path:board,// 子路径将自动添加在上级路径后即显示为 /boardname:DataBoard,component:()import(../views/board/DataBoard.vue),// 路由元信息将任意自定义信息附加到路由上meta:{title:数据看板,// 标题icon:PieChart,// 图标requiresAuth:false,// 是否需要身份验证},},{path:user/:id,// 动态路由匹配导航时传参不同 id 都将渲染 UserCenter 页面示例/user/123name:UserCenter,component:()import(../views/user/UserCenter.vue),meta:{title:用户中心,icon:User,requiresAuth:true,},children:[{path:profile,// 匹配 /user/123/profilename:UserProfile,component:()import(../views/user/UserProfile.vue),meta:{title:个人资料,icon:,requiresAuth:true,},},{path:setting,// 匹配 /user/123/settingname:UserSetting,component:()import(../views/user/UserSetting.vue),meta:{title:账号设置,icon:,requiresAuth:true,},},],},],},// 捕获 404 Not found 路由必须书写在所有路由的最后{path:/:pathMatch(.*)*,name:NotFound,component:()import(../views/NotFound.vue),},];3. 在main.js中导入并注册路由/* src/main.js */import{createApp}fromvue;importAppfrom./App.vue;// 导入路由importrouterfrom./router;constappcreateApp(App);app.use(router);// 注册路由app.mount(#app);4. 在 vue 中渲染路由组件和对路由进行操作使用 ElementPlus 请参考我之前的文章vue3elementplussass/scss安装配置教程使用svg图标、引入外部字体、定义变量模块、修改组件样式、一键切换主题等App.vue根组件!-- src/App.vue --templaterouter-viewv-slot{ Component }transition!-- 可选在路由组件之间切换时实现过渡效果 --keep-alive!-- 可选非活跃的组件将会被缓存 --component:isComponent//keep-alive/transition/router-view/templateHomeView.vue嵌套路由上级组件!-- src/views/HomeView.vue --templatedivclasshome_view!-- 全局主菜单示例 --el-menu:default-activeactiveIndexroutertemplatev-foritem in menus:keyitem.name!-- router 模式下 index 需匹配路由 path --el-sub-menu:indexitem.pathv-ifitem.children?.filter(child child.meta.icon).lengthtemplate#titlecomponent:isitem.meta.icon/span{{ item.meta.title }}/span/templateel-menu-itemv-forchild in item.children:keychild.path:indexchild.path{{ child.meta.title }}/el-menu-item/el-sub-menuel-menu-item:indexitem.pathv-elsecomponent:isitem.meta.icon/template#title{{ item.meta.title }}/template/el-menu-item/template/el-menudivclasschild_page!-- 页面导航条示例 --el-breadcrumbel-breadcrumb-itemv-foritem in navs:keyitem.path:toitem.path{{ item.meta.title }}/el-breadcrumb-item/el-breadcrumb!-- 切换导航时若匹配到子路由其组件将渲染在这里 --router-view:key$route.path//div/div/templatescriptexportdefault{data(){return{activeIndex:this.$route.path,// 激活菜单自动匹配当前路径}},computed:{// 根据路由配置生成菜单列表menus(){// 递归整理路由树constfilterRoutes(data){constresult[]data.forEach(item{if(item.children?.length){constchildrenfilterRoutes(item.children)if(children?.length){result.push({...item,children})}}else{// 过滤需要授权但无权限的路由自定义逻辑if(!item.meta.requiresAuth||(item.meta.requiresAuthlocalStorage.getItem(item.name))){result.push(item)}}})returnresult}returnfilterRoutes(this.$router.options.routes[1].children)},// 根据路由记录生成导航列表navs(){returnthis.$route.matched.filter(itemitem.meta.title)}},watch:{// 监听路由更新$route(to,from){console.log(to,from)},// 监听路由参数变化$route.query:{handler(newVal,oldVal){console.log(newVal,oldVal)},deep:true,},},methods:{// 路由操作示例routerAction(){// 导航到路由this.$router.push({name:DataBoard})this.$router.replace({name:UserCenter})// replace 将替换历史记录this.$router.push({name:UserProfile,// 路径参数params:{id:321,// 匹配到 /user/321/profile},// 查询参数query:{page:1,// 显示为 /user/321/profile?page1},})// 返回上一个历史记录this.$router.back()this.$router.go(-1)// 获取路由数据constrouteNamethis.$route.nameconstuserIdthis.$route.params.idconstcurrentPagethis.$route.query.page},},}/script

相关新闻

零基础也能 5 步上手 dnSpy:这款 .NET 调试工具为何值得一试

零基础也能 5 步上手 dnSpy:这款 .NET 调试工具为何值得一试

零基础也能 5 步上手 dnSpy:这款 .NET 调试工具为何值得一试 【免费下载链接】dnSpy Unofficial revival of the well known .NET debugger and assembly editor, dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy 当你面对一个没有源代码的 .NET …

2026/10/13 1:05:23 阅读更多 →
英雄联盟回放播放器 ROFL-Player:给过期的回放文件一台时间机器

英雄联盟回放播放器 ROFL-Player:给过期的回放文件一台时间机器

英雄联盟回放播放器 ROFL-Player:给过期的回放文件一台时间机器 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 你有没有在某…

2026/10/13 1:05:14 阅读更多 →
怀远网站建设哪家好:揭秘本地中小企业选择建站公司的真实内幕与避坑指南

怀远网站建设哪家好:揭秘本地中小企业选择建站公司的真实内幕与避坑指南

在如今的数字时代,拥有一个优质的官方网站对于任何一家企业来说,都不仅仅是一个展示信息的窗口,更是品牌实力的象征和获客的核心渠道。特别是对于身处安徽蚌埠怀远县的企业来说,随着互联网经济的深入渗透,越来越多的本地老板开始意识到“线上名片”的重要性。然而,当大家…

2026/10/13 1:53:50 阅读更多 →

最新新闻

移动端 AI Agent Harness Engineering 的机遇与限制:从边缘计算到大模型压缩的落地路径

移动端 AI Agent Harness Engineering 的机遇与限制:从边缘计算到大模型压缩的落地路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 7:02:56 阅读更多 →
Webpack 4.x 入门配置实战:面向存量项目的稳定构建方案

Webpack 4.x 入门配置实战:面向存量项目的稳定构建方案

1. 项目概述:为什么一个“老”工具的入门配置还值得重写三遍?Webpack 4.x 这个名字听起来像古董——毕竟现在连 webpack 5 都已稳定多年,v6 也在社区里被反复讨论。但现实是,我去年接手的三个中型前端项目,全部基于 we…

2026/10/13 7:02:56 阅读更多 →
Redis 从入门到实战(12):性能调优与生产避坑(完结)

Redis 从入门到实战(12):性能调优与生产避坑(完结)

性能调优与生产避坑 本篇命令全部实测(Redis 7.4.11)。收官篇:把前面 11 篇的知识变成线上战斗力。 一、性能排查的三板斧 遇到 Redis 慢,按这个顺序排查: #mermaid-svg-c3qvFd5v0vxNscNd{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px…

2026/10/13 7:02:56 阅读更多 →
黄金站上4800美元:牛市逻辑、机构预测与回调应对全解析

黄金站上4800美元:牛市逻辑、机构预测与回调应对全解析

现货黄金站上4800美元,这个数字放半年之前,绝大多数人会觉得是在做梦。但行情就是这么走出来的:从2024年初的2000美元出头,到2025年一路突破关键心理关口,再到如今4800美元的整数大关站上,整个节奏快得让人…

2026/10/13 7:02:56 阅读更多 →
BES 音频无线平台蓝牙使用指南:框架架构、经典蓝牙、BLE 与 TWS 通信全解析

BES 音频无线平台蓝牙使用指南:框架架构、经典蓝牙、BLE 与 TWS 通信全解析

BES 音频无线平台蓝牙使用指南:框架架构、经典蓝牙、BLE 与 TWS 通信全解析 一、蓝牙框架 1.1 总体架构 蓝牙系统的总体架构如下图所示: 图 1|蓝牙总体架构(Summary Architecture) 1.2 软件架构与目录绑定 蓝牙软件架构及各功能对应的 SDK 目录如下: 图 2|蓝牙软…

2026/10/13 7:02:56 阅读更多 →
【I2C的七宗罪】深度总结:从协议原理到硬件故障排查

【I2C的七宗罪】深度总结:从协议原理到硬件故障排查

前言:最近在网上淘到了一篇讲解IIC的文章,讲的是一个老工程师的多年IIC调试工作的总结,看了之后感觉覆盖了几乎所有的IIC调试过程可能遇到的问题,由于在CSDN平台上面没有发现类似的完整的文章,现就此重新加工编辑一下&…

2026/10/13 7:01:55 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →