当前位置: 首页 > 编程笔记 >

vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置

逑禄
2023-03-14
本文向大家介绍vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置,包括了vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置的使用技巧和注意事项,需要的朋友参考一下

需求:

商品列表页面浏览,进入商品详情,点击返回仍然是之前浏览的位置

实现:

使用 vue 的 keep-alive 的 include 属性给组件做动态缓存,从详情页返回不变,从其他页面进入列表页则刷新

加需要缓存的列表页面定义一个数据集在 vuex

state:{
  pageListArr:[]
}

列表页的 name 为 proList ,详情页的 name 为 proDetail ,只有 PageListArr 包含的字段才会被缓存,如 pageListArr.push("proList")

<keep-alive :include="pageListArr">
  <router-view></router-view>
</keep-alive>

思路:

在页面初始化前,获取来源页面的 name 和要去加载页面的 name .

在这里使用全局导航守卫

router.beforeEach((to, from, next) => {
 // 来源页面name -> from.name
 // 去往页面name -> to.name
 // 如果要跳转的页面为商品列表,且不是从商品详情返回或者跳转
 if(to.name===`proList`&&from.name!==`proDetail`){
   pageListArr.push(`proList`)
 }
 // 来源为商品页面返回列表页面
 if(to.name===`proList`&&from.name===`proDetail`){
   console.log(`不做处理`)
 }
})

当多个不同的列表页面需要设置缓存时,如分类商品列表,活动商品列表

需要先判断 pageListArr 是否已缓存某些页面,只有从商情详情返回已缓存的列表页才是无刷新,未缓存的列表页面仍然需要新缓存

总结

以上所述是小编给大家介绍的vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 类似资料:
  • 本文向大家介绍js返回前一页刷新本页重载页面,包括了js返回前一页刷新本页重载页面的使用技巧和注意事项,需要的朋友参考一下

  • 写了个简单的例子: 路由如下 在角色列表页中使用onMounted获取列表数据 在角色列表页中判断路由以正确显示页面 问题如下: 当在角色列表页点击编辑/添加跳转到表单页做完操作点击确定返回列表页后,列表页没有刷新,返回操作如下: 观察了网络请求,返回到列表页后列表页根本就没有发送getTableList里面的接口,也就是说onMounted没执行,试了很多方法都不行,列表页面数据还是不刷新,检查

  • 表格那种列表页(里面包括各种各样的筛选)筛选之后跳转到详情页 现在的需求是 在返回这个列表页的时候 页面不刷新 还是点进详情页时的状态 尝试过keepalive无效

  • 本文向大家介绍AngularJs返回前一页面时刷新一次前面页面的方法,包括了AngularJs返回前一页面时刷新一次前面页面的方法的使用技巧和注意事项,需要的朋友参考一下 要求: 页面A进入到页面B,在页面B处理完后返回页面A,页面A里的数据应该动态的减去一条,但由于一般情况下页面是缓存起来的,返回A后读取的是缓存静态页面,里面显示的数据不会减少。应客户要求,需要重新加载一次数据,达到页面A可以刷

  • 本文向大家介绍JS本地刷新返回上一页代码,包括了JS本地刷新返回上一页代码的使用技巧和注意事项,需要的朋友参考一下 长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下: 一、JS 重载页面,本地刷新,返回上一页 代码如下:  返回前二页并刷新的JS代码应该怎样写。 代码如下: history.go(-2); location.reload(); 二、js 方法 代码如下: <a hr

  • 问题内容: 我有一个应用程序,它使用一个ng-view和多个控制器和视图。如果我浏览根目录,例如:www.domain.com,则一切正常。除非我按Ctrl +R(刷新),否则会显示404错误页面未找到。例如:刷新此页面给我错误。http://domain.com/item/1/。 但是,如果我使用hashbang访问页面,则它可以工作。例如:http://domain.com/#!/item/1