vue-vben-admin icon indicating copy to clipboard operation
vue-vben-admin copied to clipboard

动态路由缓存问题

Open TothingWay opened this issue 3 years ago • 7 comments

Describe the bug

菜单:功能 > Tab带参

打开 Tab带参1,Tab带参2 页面,点击刷新按钮,两个页面的填写的缓存数据均会被清空

因为动态路由页面的name相同,造成这个情况,请问这个有好的解决方案吗?

Reproduction

  1. 打开菜单 功能 > Tab带参 > Tab带参1 并输入内容
  2. 打开菜单 功能 > Tab带参 > Tab带参2 并输入内容
  3. 刷新 Tab带参1 或者 Tab带参2, 两个页面的填写的缓存数据均会被清空

System Info

  • Operating System: MacOS 11.6.1
  • Node version: 14.15.4
  • Package manager (npm/yarn/pnpm) and version: 6.14.10

TothingWay avatar Dec 13 '21 05:12 TothingWay

看文档Meta配置项判断一下ignoreKeepAlive的缓存页面就可以了

Laowui avatar Jan 18 '22 02:01 Laowui

兄弟,你可能没有明白我的意思,我需要keepAlive的缓存功能,但是当页面是动态路由的时候(例如:/detail/:id),打开两个该页面的时候,两个页面的name是相同的,vue的keepAlive是给予name缓存的,你使用标签页刷新功能的时候,会移除keepAlive中include的name,导致所有的动态路由页面都被刷新了。

TothingWay avatar Jan 19 '22 01:01 TothingWay

那就存一下数据不可以解决你数据消失的问题吗,pinia可以满足啊

Laowui avatar Jan 20 '22 03:01 Laowui

去掉 includes... 如果你需要全局缓存的话. 测试有效. 但是不能定制某个tab满足 "每次切换都刷新".

我还没理解, keep-live中关于 includes的设计.

includes的局限是 通过 Component的名称进行缓存. 动态组件的每个 key都不一样,因此下面这段代码就不缓存了?

<keep-alive v-if="openCache" :include="getCaches">  
          <component :is="Component" :key="route.fullPath" />
 </keep-alive>

tearf001 avatar Feb 28 '22 09:02 tearf001

同样的场景,我是开启了缓存,每次关闭再打开新的tab时候不会重新发请求,感觉这个设计思路就有问题一样= =,已存在tab栏里的页面在缓存情况下,切换不发请求是正常的,但重新打开页面也不请求就有问题了啊

zfing avatar May 04 '23 07:05 zfing

兄弟,你可能没有明白我的意思,我需要keepAlive的缓存功能,但是当页面是动态路由的时候(例如:/detail/:id),打开两个该页面的时候,两个页面的name是相同的,vue的keepAlive是给予name缓存的,你使用标签页刷新功能的时候,会移除keepAlive中include的name,导致所有的动态路由页面都被刷新了。

遇到同样的问题!!!

jsmakshi avatar Feb 26 '24 03:02 jsmakshi

This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days

anncwb avatar May 04 '24 01:05 anncwb