iview-admin
iview-admin copied to clipboard
参数不同的多个路由匹配同一个组件,怎么使用keep-alive分别缓存
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,参数不同,希望打开两个页面分别保存状态(填写的未提交的数据,选项卡的选项,滚动的位置), 这样两个页面填写的内容 就会缓存下来,但是我测试不同路由同一个组件没有成功,我想过用动态路由,但是方案不是很好,因为如果是商品列表到商品详情,我不可能吧所有的商品详情(几万个)的路由都动态添加吧,希望给个思路。谢谢
给组件增加一个key试试,用route的fullPath
@TraineeFang 我最近也碰到同样的需求,目前没有思路,请问您现在有解决方案吗?
按楼上的思路可行

@liunianyuying 我按照你图中的方法,并没有生效,请问你使用的iview-admin是哪个版本?或者说还有其他需要改动的地方?
给组件增加一个key试试,用route的fullPath
it works!
给组件增加一个key试试,用route的fullPath
it works! 请问为啥加了这个就能用了,能讲下原理吗?
给组件增加一个key试试,用route的fullPath
it works! 请问为啥加了这个就能用了,能讲下原理吗?
没啥原理啊。。。vue的缓存机制和对比机制是基于key的,key不同就一定会认为是不同的东西而已
给组件增加一个key试试,用route的fullPath
it works! 请问为啥加了这个就能用了,能讲下原理吗?
没啥原理啊。。。vue的缓存机制和对比机制是基于key的,key不同就一定会认为是不同的东西而已
可以了解下diff算法
告诉你 加 :key的都是没有经验的
告诉你 加 :key的都是没有经验的
请问还有其他方法吗