New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
多级路由嵌套 keep-alive 失效 #406
Comments
这出现的原因是多级路由导致的,就是router-view嵌套 在层级不同的router-view中切换tag会出现缓存数据失效的问题。比如你在综合table和table内联两者之间切换不会有问题,但你和table之外的页面切换时就会有问题。我之后想想有没有什么解决方案吧。 |
你的缓存数据是用什么存的 我之前react 做标签数据是直接存在state里 没有这种问题 |
目前使用 vue 的 keep-alive. 当然你也可以和你之前的做法一样,存在vue的vuex里。 |
这是keep-alive的bug 么 网上查了很多资料 都没有这方面的问题 |
解决了 原来是被你设置了cachedViews 删掉cachedViews 所有子页面全都keep-alive 就行了 或者是你cachedViews里面的代码有bug 修复一下 应该是可以的。 |
不算是bug,就如我前面所说的多久层级切换的时候会让缓存失效。你是全页面keep-alive 所以没有这个问题。 |
那请问有没有办法使得多级路由的keep-alive依然有效呢? |
每个多级目录的component指向同一个.vue,就可以做到不同的多级目录之间共享keep-alive,但是它们与根目录之间还是不能共享keep-alive。即只有同一个router-view之间才能共享keep-alive |
请问关闭tag,打开后依旧会缓存这个问题你解决了吗,我还发现右键刷新第二次就重定向不到标签了 |
即使手动追加到cacheViews里面二级菜单router-view的name,在切换到任何一个路由时候,cacheViews里面二级菜单的子页面mounted都将会被执行一次。 |
我也有这个问题,不知道好了吗 |
只在state.cachedViews 加上,会在关掉之后的 DEL_ALL_VIEWS中再次将 state.cachedViews 清空,所以在后续清空中继续设置一遍就好了。
建议作者可以默认包含一个什么都不做的route-view,然后state.cachedViews 从空数组改为一个包含空route-view的数组 |
这个确实会 请问你解决了吗? |
这个问题我自己解决了,之前也想了好多办法,比如用vuex来做缓存等等,发现都太麻烦。 |
你好,可以看看你的关键代码吗? |
我的不是用vue-element-admin做的,当时比较早,还没有vue-element-admin,自己搭的框架。 我这边的解决办法是这样的,首先将配置好的router,用vuex缓存起来,用作菜单的显示。 然后把router转换一下,全部转换成一级,再router.addRoutes, 这样菜单的显示和实际操作的路由就分离了,一个是多级,一个是一级。 |
这个问题解决了吗? |
我做的时候,换了个思路,menu和router是分离的,索性就把数据搞成两套。然后重新生成一套供vue-router使用的始终保持两层的数据,就规避了三层的问题。menu数据还是作者的数据没动。(我项目的菜单登陆时候动态获取的,我在登陆成功拿到菜单数据之后format了两次,有个问题是:第二层级是不能跳转的😂,感觉跟楼上的思路都差不多) |
@bluegek 能看下你的具体解决方法吗 |
原本keep-alive是按照组件名缓存。 |
我这边将菜单显示跟路由做了分离,目前使用下来没什么问题。 `export const initMenu = (router, menu) => { const routeMenu = formatRoutes(filterAsyncRouter(menu)) const unfound = { router.addRoutes(routeMenu) // 遍历后台传来的路由字符串,转换为组件对象 |
这个问题已经解决,思路跟楼上的一样,核心就是给菜单展示和真正的路由区分开来,真正的路由最多到二级公用一个router-view,就能实现缓存了 |
在添加路由前转换:
|
完美解决问题 |
|
对于多级路由嵌套使keep-alive失效的情况,在src下面的permission.js文件中加入下面代码: 筛选出面包屑导航的路由 |
你好,你的邮件已收到,我们会对相关问题进行处理,感谢你的关注
|
1 similar comment
你好,你的邮件已收到,我们会对相关问题进行处理,感谢你的关注
|
多标签间切换有时能保存之前的数据有时不行
The text was updated successfully, but these errors were encountered: