vue路由缓存(子路由缓存、动态路由缓存、滚动条相互影响)

移动端中,我们浏览商品列表的时候,点击进入详情页面,然后返回到商品列表,一般都是用户浏览到哪里,返回来的时候还是那个位置(试想一下,如果一返回,页面重新刷新,你又要往上滑不知道多少页才能找到你刚刚的那款商品,这么一想是不是很崩溃),但是vue很贴心,给我们设计了keep-alive

<keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们

keep-alive在vue2和vue3中还是有些区别的

在vue2中

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

如果你在vue3中使用vue2的写法,在编译的时候会报警告,你参照警告修改就行

在vue3中

<router-view v-slot="{ Component }">
    <keep-alive :include="cachedViews">
      <component :is="Component"></component>
    </keep-alive>
</router-view>

这两个页面是在子路由里面 ,所以子路由也要嵌套一下keep-alive

 

 

 

 首页和吃喝玩乐都有列表页面,但是并不是都要缓存

缓存的情况:福利商品列表进入详情页面、吃喝玩乐商品进入详情页面

不缓存的情况:福利跳吃喝玩乐

如果不使用动态路由缓存的话,那么福利到吃喝玩乐也会北缓存,吃喝玩乐到福利也会被缓存,这显然不符合规范

所以这里就用到了动态路由缓存

使用 include + beforeRouteLeave + vuex  + scrollBehavior (也是边查资料边踩坑)

include支持数组,因为我需要缓存的页面有几个,所以我这里使用数组去动态缓存

 store中的写法很简单

 接下来就是在离开页面的时候操作vuex中cachedView的数组

在需要动态路由缓存的页面,加上这个,跟created()等生命周期同级

 这样,当你在列表页面进到详情页面,你的路由数组为['search','dine-libertinismtwo','parentCpn'],当你切换下面tabar页面的时候,路由数组为['search','dine-libertinismtwo']

路由文件中

 网上是这么写的,但是在我这里不行,会出现滚动条相互影响

 我打印了一下savePosition

 然后我就投机取巧,把x,y修改成left,top,就可以了

 至此,就完成了动态路由缓存了,说来惭愧,这竟然是我第一次用keep-alive

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值