iview-admin icon indicating copy to clipboard operation
iview-admin copied to clipboard

参数不同的多个路由匹配同一个组件,怎么使用keep-alive分别缓存

Open TraineeFang opened this issue 7 years ago • 10 comments

vue2.5.13 keep-alive,如果不同路由使用的是同一组件,怎么创建不同实例,希望用keep-alive解决。

代码如下:

const routes = [{ 
    title: '报表查询', 
    path: 'AutoQuery/:ReportId', 
    name: 'AutoQuery', 
    component: resolve => { require(['@/views/Report/AutoQuery.vue'], resolve); } 
}];

不同的组件之间切换,页面缓存保存状态,使用keep-alive可以轻松解决这个需求。 但是同一个组件匹配多个不同路由,怎么分别保持状态? 比如: 我访问 AutoQuery /1 和 AutoQuery /2,参数不同,希望打开两个页面分别保存状态(填写的未提交的数据,选项卡的选项,滚动的位置), 这样两个页面填写的内容 就会缓存下来,但是我测试不同路由同一个组件没有成功,我想过用动态路由,但是方案不是很好,因为如果是商品列表到商品详情,我不可能吧所有的商品详情(几万个)的路由都动态添加吧,希望给个思路。谢谢

TraineeFang avatar Jun 02 '18 10:06 TraineeFang

给组件增加一个key试试,用route的fullPath

mizuka-wu avatar Jun 20 '18 01:06 mizuka-wu

@TraineeFang 我最近也碰到同样的需求,目前没有思路,请问您现在有解决方案吗?

eric-leo avatar Oct 24 '18 09:10 eric-leo

按楼上的思路可行 image

eric-leo avatar Oct 24 '18 11:10 eric-leo

@liunianyuying 我按照你图中的方法,并没有生效,请问你使用的iview-admin是哪个版本?或者说还有其他需要改动的地方?

zyz0 avatar Oct 30 '18 09:10 zyz0

给组件增加一个key试试,用route的fullPath

it works!

weaponready avatar Jan 27 '19 12:01 weaponready

给组件增加一个key试试,用route的fullPath

it works! 请问为啥加了这个就能用了,能讲下原理吗?

HappyFeet1 avatar Mar 01 '19 02:03 HappyFeet1

给组件增加一个key试试,用route的fullPath

it works! 请问为啥加了这个就能用了,能讲下原理吗?

没啥原理啊。。。vue的缓存机制和对比机制是基于key的,key不同就一定会认为是不同的东西而已

mizuka-wu avatar Mar 01 '19 03:03 mizuka-wu

给组件增加一个key试试,用route的fullPath

it works! 请问为啥加了这个就能用了,能讲下原理吗?

没啥原理啊。。。vue的缓存机制和对比机制是基于key的,key不同就一定会认为是不同的东西而已

可以了解下diff算法

jovicheng avatar Mar 11 '19 14:03 jovicheng

告诉你 加 :key的都是没有经验的

kstosuk avatar Dec 19 '21 00:12 kstosuk

告诉你 加 :key的都是没有经验的

请问还有其他方法吗

qinggege2016 avatar Feb 09 '22 06:02 qinggege2016