vue router keepAlive的页面 到此页面根据不同条件判断是否刷新 不刷新时记录滚动条位置

需求
A—>B—>C,A页面到B页面时,B页面刷新请求数据,从C页面返回到B页面时则不刷新,需要回到原来选中滚动的地方
比如:淘宝的商品列表(B)页面跳转到详情页(C)的时候,当返回上一级的商品列表时,肯定是返回上次浏览的位置,不然用户体验很差,使用了keep-alive之后呢页面不刷新了,随之的问题就是查找特定商品列表(A—>B)时,列表一直是上次缓存的列表页。
解决办法
首先,在app.vue中使用keepAlive,如果是meta信息里keepAlive为true,那就包在keep-alive里,否则就是正常的路由,不需要缓存

<keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

然后,你需要在路由中写入meta的keepAlive信息,将你需要使用keepAlive的页面的meta设置true
在这里插入图片描述
首先定义个全局变量,用来判断页面是否要刷新。
在这里插入图片描述

在beforeRouteEnter钩子函数中判断哪个需要重载

在这里插入图片描述
之所以在定义全局变量isRefresh而不在data里定义是因为当生命周期进入beforeRouteEnter的时候,此时当前页面还没有被mounted,因此我们是获取不到当前实例this的指向的,变量值也取不到。
keep-alive之后不会执行created,mounted钩子了,在activated中判断需要刷新之后,将列表数据初始化,发起请求即可,不刷新时则返回到列表记录的滚动条的位置
在这里插入图片描述
关于记录滚动条位置
首先滚动列表
在这里插入图片描述
data中定义 loadSroll
在这里插入图片描述

点击列表进入详情页时,我把位置放到session中了
在这里插入图片描述
然后就是在activated中判断刷新和不刷新的情形来决定是否滚动到原来的位置
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值