15、springboot3 vue3开发平台-前端-路由构建, 使用路由守卫,加载动态路由,pinia管理路由缓存数据

1. 创建菜单路由pinia管理

  • 通过searchSelfMenusService 从后端请求菜单树列表, 菜单树查询构建内容见前变后端部分菜单列表树部分
    src\stores\menu.ts
  • vue3 动态加载组件要使用 import.meta.glob(‘…/views/**/*.vue’)
  • 使用elementplus el-menu 所以要构建完整路由,以"/" 开头,不然会出现路由跳转时路由拼接问题,使用contactChildRouter 拼接完整路由,在后续递归菜单时使用
  • mountRouter 将所有菜单挂载在Layout子菜单下,Layout布局页面见下一章节
  • 数据说明
    • menuList: 构建菜单
    • routerList: 路由缓存,创建过程中会加载vue组件
    • menuArray: 构建完整路由后菜单的一维存储,便于后续菜单、路由搜索
import {
   
   defineStore} from 'pinia'
import {
   
   

已下架不支持订阅

### Vue3 中 `keep-alive` 实现多级路由缓存 #### 使用场景与原理说明 为了提升用户体验,在单页应用(SPA)中,当用户切换不同视图时保持某些组件的状态不失效是非常重要的。Vue 提供了 `<keep-alive>` 组件来实现这一点。对于复杂的多级嵌套路由结构而言,可以通过组合使用 `<keep-alive>`, Vuex (或 Pinia), 和自定义逻辑来达到理想的缓存效果。 #### 配置方法 在项目中的 App.vue 文件内引入并配置如下代码: ```html <template> <div id="app"> <!-- 过渡动画 --> <transition name="fade-transform" mode="out-in"> <!-- KeepAlive 包裹 RouterView --> <keep-alive :include="cachedViews"> <router-view /> </keep-alive> </transition> </div> </template> <script setup lang="ts"> import { computed } from &#39;vue&#39; import store from &#39;./store&#39; // 假设已创建好 Store 实例 // 计算属性获取缓存列表 const cachedViews = computed(() => { return store.state.tagsView.cachedViews || [] }) </script> ``` 上述模板部分展示了如何利用计算属性动态绑定 `:include` 属性到存储于 Vuex 或者其他状态管理工具内的缓存路径数组上[^1]。 接着是在 router/index.ts 定义路由规则的时候加入 meta 字段用于标记哪些页面应该被缓存: ```typescript { path: &#39;/example&#39;, component: () => import(&#39;@/views/Example&#39;), children:[ { path:&#39;child&#39;, component:() => import(&#39;@/views/example/Child&#39;), meta:{ cache:true }, // 设置此字段表示子页面也需要缓存 } ], } ``` 最后一步就是在全局守卫里处理具体的缓存策略, 如下所示: ```javascript router.beforeEach((to, from, next)=>{ const hasCache = to.matched.some(record=>record.meta.cache); if(hasCache){ let viewName = getRouteKey(to); // 自定义函数返回唯一key作为缓存依据 store.dispatch(&#39;tagsView/addCachedView&#39;,viewName); } next(); }); ``` 这里通过遍历即将进入的目标路由匹配记录(`matched`)检查是否存在带有特定元数据 (`meta.cache=true`) 的项;如果存在,则调用相应的方法更新缓存队列[^2]。 #### 注意事项 需要注意的是,以上提到的方式适合那些页面是否需要缓存不会频繁改变的应用程序。如果有更复杂的需求比如按需加载、条件性刷新等情况则可能还需要进一步优化调整方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知所云,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值