建设在线观看视频网站空间 建网站

张小明 2025/12/31 14:01:01
建设在线观看视频网站,空间 建网站,怎么做导购网站,杭州利兴建设官方网站文章目录Vue2 动态路由失效的根因与正确解法#xff1a;用 Vuex 管理权限路由一、问题复现#xff1a;路由加了#xff0c;页面却没变二、根因分析#xff1a;vue-router 不具备响应式能力1️⃣ addRoutes 只影响「路由匹配」2️⃣ router.options.routes 不是响应式数据三…文章目录Vue2 动态路由失效的根因与正确解法用 Vuex 管理权限路由一、问题复现路由加了页面却没变二、根因分析vue-router 不具备响应式能力1️⃣ addRoutes 只影响「路由匹配」2️⃣ router.options.routes 不是响应式数据三、正确架构菜单 Vuex 路由状态核心设计思想重点四、最小可用实现去掉项目噪音版1️⃣ permission 模块核心2️⃣ 路由守卫必须 replace3️⃣ 侧边栏只从 Vuex 读五、我在项目中踩过的几个真实坑坑 1动态 import 导致菜单不显示坑 2后端路径错误直接导致路由崩溃坑 3数据判断不严谨导致“假空数组”坑 4computed 重复定义导致菜单逻辑失效六、最终收益Vue2 动态路由失效的根因与正确解法用 Vuex 管理权限路由在 Vue2 项目中做动态路由时很多人都会遇到一个诡异问题接口已经返回了动态路由router.addRoutes()也调用了但页面菜单就是不刷新。我在实际项目中完整踩过这个坑最终总结出一个稳定、可维护、可扩展的解决方案路由只负责跳转菜单必须交给 Vuex 管理。一、问题复现路由加了页面却没变典型现象接口返回 9 个路由router.addRoutes(accessRoutes)执行成功控制台打印router.options.routes是完整的侧边栏菜单仍然只有 2 个这说明一件事路由层生效了但 UI 层完全不知道发生了变化。二、根因分析vue-router 不具备响应式能力这是 Vue2 动态路由最容易被忽略的一点1️⃣addRoutes只影响「路由匹配」router.addRoutes(accessRoutes)它只做一件事让 URL 能匹配到组件但它不会触发组件重新渲染更新侧边栏通知 Vue 进行响应式更新2️⃣router.options.routes不是响应式数据如果你的菜单是这样写的this.$router.options.routes那菜单永远不会自动刷新因为它不是 Vue data不是 Vuex stateVue 根本监听不到变化三、正确架构菜单 Vuex 路由状态核心设计思想重点后端返回菜单 / 权限 ↓ Vuex generateRoutes ↓ Vuex.state.routes ←—— 侧边栏渲染 ↓ router.addRoutes ←—— 路由跳转一句话总结vue-router 管跳转Vuex 管“展示用的路由数据”四、最小可用实现去掉项目噪音版1️⃣ permission 模块核心// store/modules/permission.js import { constantRoutes } from /router const state { routes: [], // 侧边栏使用 addRoutes: [] // 动态路由 } const mutations { SET_ROUTES(state, routes) { state.addRoutes routes state.routes constantRoutes.concat(routes) } } const actions { generateRoutes({ commit }, asyncRoutes) { commit(SET_ROUTES, asyncRoutes) return asyncRoutes } } export default { namespaced: true, state, mutations, actions }2️⃣ 路由守卫必须 replacerouter.beforeEach(async (to, from, next) { const hasToken getToken() if (!hasToken) { return next(/login) } const hasRoles store.getters.roles?.length 0 if (hasRoles) { return next() } try { await store.dispatch(user/getInfo) const accessRoutes await store.dispatch( permission/generateRoutes, asyncRoutesFromApi ) router.addRoutes(accessRoutes) // 关键重新触发导航 next({ ...to, replace: true }) } catch (e) { next(/login) } })❗ 不加replace: true新路由本次不会生效3️⃣ 侧边栏只从 Vuex 读computed: { routes() { return this.$store.state.permission.routes } } 禁止使用this.$router.options.routes五、我在项目中踩过的几个真实坑坑 1动态 import 导致菜单不显示// ❌ Vue2 场景下不稳定 component: () import(/views/${path}) // ✅ 稳定方案 component: resolve require([/views/${path}], resolve)坑 2后端路径错误直接导致路由崩溃解决方案兜底 Layoutif (!item.component || item.component Layout) { menu.component Layout }坑 3数据判断不严谨导致“假空数组”// ❌ if (res.data res.data.length 0) // ✅ if (Array.isArray(res.data) res.data.length 0)坑 4computed 重复定义导致菜单逻辑失效// ❌ 后者会覆盖前者 computed: {...} computed: {...} // ✅ computed: { ...mapGetters([]), sidebar() {} }六、最终收益采用“菜单 Vuex 路由状态”后菜单 100% 响应式动态路由稳定生效权限逻辑集中管理后端可完全控制前端菜单结构架构清晰可维护性明显提升这套方案已经在真实业务项目中长期运行适合中大型 Vue2 管理系统。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站金山深圳做网站好的公司

AI字幕生成利器:5步轻松实现视频字幕自动化处理 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows VideoSrt是一款基于AI智能…

张小明 2025/12/31 14:00:28 网站建设

自建网站经营者例子服务器中安装wordpress

篇文章主要涉及到 kubelet 通过 csi 向运行时发送创建请求,运行时发生了什么?pod 网络又是怎么连通的?对应的流量图画板我们将使用 docker 和 linux Bridge 去完成这个 pod 需求流程描述kubelet 通过 CRI 接口调用运行时(如 conta…

张小明 2025/12/31 13:59:54 网站建设

自己注册了个域名想做一个网站吗2233网页游戏大全

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 编写一个面向初学者的Python YAML教程代码,包含以下内容:1) 安装PyYAML库的方法;2) 基本YAML语法示例;3) Python读取YAML文件的3种方…

张小明 2025/12/31 13:59:21 网站建设

网站推广的方法枫子游戏推荐网站怎么做

作为一名射频工程新手,你是否曾经为复杂的网络分析工具而头疼?scikit-rf射频工具包就是你的最佳选择!这个强大的Python射频分析工具让射频工程变得前所未有的简单和高效。无论你是要处理S参数、进行校准测试,还是设计阻抗匹配网络…

张小明 2025/12/31 13:58:48 网站建设

央企网站建设意义wordpress自定义分页

近年来,小学阶段儿童近视高发态势愈发明显,已成为影响青少年身心健康的突出问题。相关数据显示,我国小学生近视率已突破30%,且呈低龄化、进展快的特征。近视不仅会导致孩子视远模糊、学习效率下降,还可能引发视网膜病变…

张小明 2025/12/31 13:57:41 网站建设

南宁网站建设是什么意思如何撤销网站上信息吗

报错 “Public Key Retrieval is not allowed” 出现的原因和之前分析的一样:MySQL 用户使用了 caching_sha2_password 认证,而 DBeaver 默认不允许自动获取公钥。 解决方法:方法 A:在 DBeaver 中修改连接属性点击 编辑驱动设置 →…

张小明 2025/12/31 13:57:07 网站建设