1.在要保存位置的页面route的meta中添加
refreshFlag:true, scrollTop:0
2.default.vue中添加要保存位置的组件名称
<nuxt keep-alive :keep-alive-props="{ include: includeArr }"/>
data(){
return{
includeArr:['supplierProductIndex'],//需要缓存的组件
}
}
3.要保存的组件中
设置滚动css样式
<template>
<div class="supplierScrollHeightView"
ref="supplierScrollRef"
@scroll="getScrollHandle"> </div>
</template>
<script>
export default{
name:'index',
data(){
return {
scrollTop:0
}
},
methods:{
getScrollHandle(e){
let wScrollY = e.target.scrollTop; // 当前滚动条位置
this.scrollTop = wScrollY;
let wInnerH = e.target.clientHeight; // 设备窗口的高度(不会变)
let bScrollH = e.target.scrollHeight; // 元素总高度
if (wScrollY + wInnerH >= bScrollH - 1) {
this.goBottomHandle() ;//到达底部
}
},
}
},
activated() {
this.$refs.commentScrollRef.scrollTop = this.$route.meta.scrollTop;
if(this.$route.meta.refreshFlag){
//基本操作,获取数据
}
},
beforeRouteLeave(to,from,next){
from.meta.scrollTop = this.scrollTop;
next();
},
beforeRouteEnter(to,from,next){
if(from.name=='goodDetail'){
//来自详情页
to.meta.refreshFlag=false;
}else{
to.meta.refreshFlag = true;
to.meta.scrollTop=0;
}
next();
},
</script>
<style>
.supplierScrollHeightView{ width: 100%; overflow-x:hidden; overflow-y:scroll; height:calc(100vh - 95px) }
</style>