vue多级路由使用keep alive无法缓存
在这里将他二级以上的路由扁平化即可
路由规则:
import Layout from '../components/Layout/index.vue' import COM from '../components/index.vue' { path:'home'', name:'home', component:Layout, children:[ { path:'/index', name:'index', component:COM, children:[ { path:'menu', name:'menu', component:()=>import('@/views/menu/index.vue'), meta:{ title:"menu", icon:'', affix: true, // 加入保护 keepAlive:true, } }, { path:'/role', name:'role', component:()=>import('@/views//role/index.vue'), meta:{ title:"role", icon:'', affix: true, // 加入保护 keepAlive:true, } } ] } ] }
然后/components/index.vue中写入
<template> <div> <router-view /> </div> </template> <script> export default { name: 'index' } </script> <style> </style>
定义拍扁方法
const handleKeepAlive = (to) => { // 判断目标路由记录是否大于2 if (to.matched && to.matched.length > 2) { // 遍历路由记录,制作面包屑导航列表,并删除依赖于AppMain组件的中间路由,实现路由扁平化 for (let i = 0; i < to.matched.length; i++) { const element = to.matched[i] // /* 从这里开始处理面包屑 */ // if (to.meta.breadcrumb && element.name !== 'index') { // ;(to.meta.breadcrumb).push({ // name: element.name, // label: element.meta.label, // type: element.meta.type // }) // } // if (!to.meta.breadcrumb) { // to.meta.breadcrumb = [] // } // /* 从这里结束处理面包屑 */ if (element.components.default.name === 'index') { let data= to.matched.splice(i, 1) console.log(data); handleKeepAlive(to) } } } else { // 当路由已经扁平化完毕的时候,将目标路由自身加入面包屑中 /* 从这里开始处理面包屑 */ // const toBreadcrumb = to.meta.breadcrumb // if (!toBreadcrumb) return // const isToInToBreadcrumb = toBreadcrumb.some( // (item) => item.name === to.name // ) // if (!isToInToBreadcrumb) { // ;(to.meta.breadcrumb).push({ // name: to.name, // label: to.meta.label, // type: to.meta.type // }) // } /* 从这里结束处理面包屑 */ } }
然后在前置守卫中执行拍扁方法
router.beforeEach(async (to, from, next) => { handleKeepAlive(to) )}
至此,就可以缓存了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!