从 PHP 到 AI + Golang,程序员自救转型手记(十三):前端路由初始化
这是一个系列 Blog作者将以一个 PHP 全栈工程师的身份利用 AI 工具claude code、codex、deepseek、豆包等从零开始学习 golang 语言并最终完成 ai-go-mallgithub | gitee开源项目的制作全程记录分享。在上一期我们已经完成 “前端状态商店、多语言初始化”本期将完成前端路由初始化前端路由初始化vue 里边实现路由使用 vue-router核心部分大概只需要以下三行代码constroutercreateRouter({history:createWebHashHistory(),routes:staticRoutes,})如上路由本身很简单麻烦的地方在于建立第一个路由时一般需要同时配置好静态路由的自动发现、首屏 loading、路由切换进度条静态路由的自动发现路由功能规划有一些预设好的静态路由比如首页、登录页、404页全部定义于//router/static.ts对应的组件在合理位置建立空白 vue 组件即可系统能自动加载//router/static文件夹内的所有 ts 路由定义文件自动合并到预设静态路由数组中最终完成所有静态路由注册创建路由实例的逻辑写在//router/index.ts文件中并于mian.ts完成路由插件注册直接将规划发给 cc基本一次性实现了所有需求但还是人工整理了一下因为写提示词还不如自己改的小细节最终核心代码如下// src\router\static.ts/* * 静态路由支持自动扩展 * 系统会自动加载 ./static 目录及其子目录中的所有 .ts 文件 * 每个模块的 default 导出可以是 RouteRecordRaw 或 RouteRecordRaw[]自动 push 到以下 staticRoutes 数组 */conststaticRoutes:ArrayRouteRecordRaw[{path:/,name:/,component:()import(//views/index.vue),meta:{title:pageTitles.Home,},},// ...登录页404 等其他静态路由]// 静态路由自动扩展逻辑conststaticFilesimport.meta.glob(./static/**/*.ts,{eager:true})for(constpathinstaticFiles){constmodulestaticFiles[path]asanyif(!module.default){console.warn([Router] Static route module${path}does not export default, skipped)continue}constroutemodule.defaultasRouteRecordRaw|RouteRecordRaw[]if(Array.isArray(route)){staticRoutes.push(...route)}else{staticRoutes.push(route)}}exportdefaultstaticRoutes创建src\router\static\adminBase.ts测试静态路由自动扩展功能// src\router\static\adminBase.tsimporttype{RouteRecordRaw}fromvue-router/** * 后台基础路由路径 */exportconstadminBaseRoutePath/admin/* * 后台基础静态路由 */constadminBaseRoute:RouteRecordRaw{path:adminBaseRoutePath,name:admin,component:()import(//layouts/admin/index.vue),// 直接重定向到 loading 路由redirect:adminBaseRoutePath/loading,meta:{title:pageTitles.Loading,},children:[{path:loading/:to?,name:adminMainLoading,component:()import(//layouts/common/loading.vue),meta:{title:pageTitles.Loading,},},],}exportdefaultadminBaseRoutesrc\router\static\adminBase.ts的default导出adminBaseRoute会自动 push 到staticRoutes数组然后通过src\router\index.ts的createRouter创建路由实例时完成注册。静态路由涉及的 vue 文件如//layouts/admin/index.vue、//views/index.vue等都已经由 cc 创建完毕里边填充了空白 vue 组件的代码等待后续完善。路由切换进度条单页应用加载完毕之后后续切换页面就不会刷新了没有加载页面的过程浏览器就不会显示自带的进度条或其他 loading 态所以需要开发者自己写一个进度条此进度条不代表真实的网页资源下载进度且路由切换往往很快所以只需要在路由加载前显示路由加载后隐藏即可我们选择使用nprogress实现路由切换进度条它会在网页顶端显示一个从左到右的蓝色加载条// src\router\index.ts 文件即 createRouter 的文件importNProgressfromnprogressimportnprogress/nprogress.cssimport{createRouter,createWebHashHistory}fromvue-routerimportstaticRoutesfrom//router/staticconstroutercreateRouter({history:createWebHashHistory(),routes:staticRoutes,})// 路由加载前router.beforeEach((){// 显示进度条NProgress.configure({showSpinner:false})NProgress.start()})// 路由加载后router.afterEach((){// 隐藏进度条NProgress.done()})exportdefaultrouter首屏 loadingvue 单页应用首次加载可能会很慢我们需要尽快显示一个 loading 动画避免长时间白屏而且系统首次加载完毕后再不显示此 loading 动画路由切换不显示。loading 的显示只需要放到 vue-router 的路由加载前钩子中即可整个系统的第一个路由加载前就能触发到 loading 的显示loading 的实现则直接使用原生 js 创建 div 即可就不要加载 vue 组件什么的了。另外一个核心点在于首次加载完毕loading 不会重复触发所以需要一个标记此标记的最佳实践是挂载到 window 对象上先声明全局类型定义// common.d.ts 文件interfaceWindow{loading:boolean}更新src\router\index.ts触发首屏 loading 显示importNProgressfromnprogressimportnprogress/nprogress.cssimport{createRouter,createWebHashHistory}fromvue-routerimportstaticRoutesfrom//router/staticimport{loading}from//utils/loadingconstroutercreateRouter({history:createWebHashHistory(),routes:staticRoutes,})// 路由加载前router.beforeEach((){NProgress.configure({showSpinner:false})NProgress.start()// 显示首屏 loadingif(!window.loading){loading.show()window.loadingtrue}})// 路由加载后router.afterEach((){// 隐藏首屏 loading只要不标记 window.loading 为 false它就永远不会再触发了if(window.loading){loading.hide()}NProgress.done()})exportdefaultrouter直接使用原生 js 创建 loading 的 div挂载到 body 节点下// src\utils\loading.ts 文件import{nextTick}fromvueimport//styles/loading.scssexportconstloading{show:(){constdivdocument.createElement(div)div.classNameai-go-page-loadingdiv.innerHTMLdiv classcontainer div classmain div classitem/div div classitem/div div classitem/div div classitem/div div classitem/div div classitem/div div classitem/div div classitem/div div classitem/div /div /divdocument.body.insertBefore(div,document.body.childNodes[0])},hide:(){nextTick((){setTimeout((){consteldocument.querySelector(.ai-go-page-loading)elel.parentNode?.removeChild(el)},1000)})},}// src\styles\loading.scss 文件 .ai-go-page-loading { width: 100%; height: 100%; position: fixed; z-index: 2147483600; background-color: #f5f5f5; .container { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); .main { width: 80px; height: 80px; .item { width: 33.333333%; height: 33.333333%; background: #409eff; float: left; animation: ai-go-page-loading-animation 1.2s infinite ease; border-radius: 1px; } .item:nth-child(7) { animation-delay: 0s; } .item:nth-child(4), .item:nth-child(8) { animation-delay: 0.1s; } .item:nth-child(1), .item:nth-child(5), .item:nth-child(9) { animation-delay: 0.2s; } .item:nth-child(2), .item:nth-child(6) { animation-delay: 0.3s; } .item:nth-child(3) { animation-delay: 0.4s; } } } } keyframes ai-go-page-loading-animation { 0%, 70%, 100% { transform: scale3D(1, 1, 1); } 35% { transform: scale3D(0, 0, 1); } }

相关新闻

2026年开发者录屏工具横向测评:后端接口报错复现实测与选型指南

2026年开发者录屏工具横向测评:后端接口报错复现实测与选型指南

本文含商业录屏工具客观测评,仅技术对比,无购买引导。一、开发者录屏场景痛点与测评标准1.1 为什么开发者需要专业录屏工具在日常开发中,录屏需求远比想象中频繁:Bug复现时完整记录请求链路和终端反馈、技术教程产出、代码评审归档…

2026/7/1 8:43:21阅读更多 →
AI代码审查工具到底值不值得上?一线团队3个月实测数据揭示真实ROI与隐性成本

AI代码审查工具到底值不值得上?一线团队3个月实测数据揭示真实ROI与隐性成本

更多请点击: https://intelliparadigm.com 第一章:AI代码审查工具到底值不值得上?一线团队3个月实测数据揭示真实ROI与隐性成本 某中型SaaS团队在CI/CD流水线中集成GitHub Copilot Business Snyk Code Sourcegraph Cody,覆盖Go…

2026/7/1 8:38:21阅读更多 →
数据库安全管理策略

数据库安全管理策略

数据库安全管理策略:守护企业核心数据资产 在数字化时代,数据库作为企业核心数据的存储载体,其安全性直接关系到业务连续性和用户隐私。随着数据泄露事件频发,数据库安全管理策略已成为企业IT治理的重中之重。本文将围绕数据库安…

2026/7/1 8:38:21阅读更多 →
spring对junit的支持

spring对junit的支持

引入spring和junit4的依赖<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.4</version> </dependency> <!-- spring对junit支持的依赖&#xff0c;spring…

2026/7/1 9:48:32阅读更多 →
【AI】魔珐星云 SDK 实战测评:Cursor、Copilot、通义灵码如何走向具身交互成品

【AI】魔珐星云 SDK 实战测评:Cursor、Copilot、通义灵码如何走向具身交互成品

博主介绍&#xff1a;✌全网粉丝24W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

2026/7/1 9:48:32阅读更多 →
分布式消息队列对比分析

分布式消息队列对比分析

分布式消息队列对比分析 在当今高并发、高可用的分布式系统中&#xff0c;消息队列作为异步通信的核心组件&#xff0c;承担着解耦、削峰、异步处理等重要职责。随着技术的演进&#xff0c;市面上涌现了多种分布式消息队列解决方案&#xff0c;如Kafka、RabbitMQ、RocketMQ等。…

2026/7/1 9:48:32阅读更多 →
视频节奏慢怎么快速变紧凑?5款剪气口软件深度对比

视频节奏慢怎么快速变紧凑?5款剪气口软件深度对比

口播完播率暴跌的隐形杀手很多创作者在复盘数据时都会遇到一个致命问题&#xff1a;视频节奏慢怎么快速变紧凑&#xff1f;口播视频里频繁的“呃、啊”、换气声以及无意义的长停顿&#xff0c;会直接导致观众在前3秒划走。手动在时间轴上一点点找空白并裁剪&#xff0c;不仅效率…

2026/7/1 9:48:32阅读更多 →
从VS Code到JetBrains,AI插件配置全链路优化,手把手教你将代码生成准确率提升至89.6%

从VS Code到JetBrains,AI插件配置全链路优化,手把手教你将代码生成准确率提升至89.6%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI辅助开发工具的演进与核心价值 AI辅助开发工具已从早期的语法补全插件&#xff0c;逐步演进为具备上下文感知、跨文件推理、自然语言驱动编程能力的智能协作者。其核心价值不再局限于提升单点编码效率…

2026/7/1 9:48:32阅读更多 →
【Flutter】MacOS 系统搭建 Flutter 开发环境 ③ ( Android Studio Ladybug 下载 / 安装 / 配置 / 编译 | SDK Manager 配置 )

【Flutter】MacOS 系统搭建 Flutter 开发环境 ③ ( Android Studio Ladybug 下载 / 安装 / 配置 / 编译 | SDK Manager 配置 )

文章目录一、Android Studio Ladybug 下载 / 安装 / 配置 / 编译1、确认系统芯片类型2、Android Studio Ladybug 下载3、SDK Manager 配置下载 API 36 及以上版本下载 SDK Tools4、同意 android-licenses 协议5、编译 Android 应用编译 debug 版本应用编译 release 版本应用参考…

2026/7/1 9:43:32阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月&#xff0c;Boris Cherny 公开宣布自己卸载了 IDE。一时间&#xff0c;Vibe Coding 成了全行业最热的话题。6个月后&#xff0c;当我们回过头来拉一份真实账本&#xff0c;发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言&#xff1a;审计结束三个月了&#xff0c;审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间&#xff0c;内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中&#xff0c;审计…

2026/7/1 5:19:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →