keep-alive保持页面位置
在vue单页面应用中,可以通过在router 配置中添加 keepAlive 来keepAlive页面,但是这样会导致页面在切换时,页面位置会回到顶部,这样用户体验不好,所以需要保持页面位置。
解决方案
- 在router配置中添加keepAlive
- 在需要保持页面位置的组件中添加scrollTop属性
- 在组件的activated钩子函数中获取scrollTop,并恢复滚动位置
- 在组件的beforeRouteLeave钩子函数中设置scrollTop
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32// router配置
{
path: '/list',
name: 'list',
component: List,
meta: {
keepAlive: true
}
}
// List组件
export default {
data() {
return {
scrollTop: 0
}
},
activated() {
// 恢复滚动位置
this.$nextTick(() => {
const pages = document.querySelector('.page');
if (pages) {
pages.scrollTop = this.scrollTop;
}
});
},
beforeRouteLeave(to, from, next) {
// 保留滚动位置
this.scrollTop = document.querySelector('.page')?.scrollTop;
next();
},
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!