vue路由缓存(子路由缓存、动态路由缓存、滚动条相互影响)
移动端中,我们浏览商品列表的时候,点击进入详情页面,然后返回到商品列表,一般都是用户浏览到哪里,返回来的时候还是那个位置(试想一下,如果一返回,页面重新刷新,你又要往上滑不知道多少页才能找到你刚刚的那款商品,这么一想是不是很崩溃),但是vue很贴心,给我们设计了keep-alive<keep-alive>包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们keep-alive在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)