vue实现前进刷新后退不刷新且后退时回到历史浏览位置

本文介绍如何在Vue项目中实现前进刷新后退不刷新的功能,并保存滚动位置。通过在router配置中添加keepAlive参数,结合App.vue中的keep-alive组件和路由钩子函数,确保从详情页返回列表页时保持原有状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue实现前进刷新后退不刷新且后退时回到历史浏览位置

需求
最近的项目需要实现从列表页跳到详情页后再从详情页回退到列表页时能顾回到历史浏览的位置(也就是滚动条上次滚动的位置)
实现
1.在router文件里需要缓存、记录位置的组件里添加keepAlive参数

  {
      path: "/owner",
      name: "owner",
      component: owner,
      meta: {
        requireAuth: true,
        keepAlive: true
      }
   },

2.在App.vue里添加如下代码

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

3.在beforeRouteEnter钩子函数中判断页面来源

beforeRouteEnter(to, from, next) {
    if(from.name === 'browse') { //判断是从哪个路由过来的,若是detail页面不需要刷新获取新数据,直接用之前缓存的数据即可
        to.meta.isBack = true;
    }
    next();
}

4.在activated钩子函数中增加相应的判断

if(!this.$route.meta.isBack){
     // 如果isBack是false,表明需要获取新数据,否则就不再请求,直接使用缓存的数据
       this.data = ''// 把数据清空,可以稍微避免让用户看到之前缓存的数据
       this.getData();
   }
   // 恢复成默认的false,避免isBack一直是true,导致下次无法获取数据
   this.$route.meta.isBack=false
 }

上面的操作已基本实现页面前进刷新后退不刷新的功能,接下来要实现回退时回到历史浏览位置
1.写一个获取当前滚动条位置的函数(在data里添加参数scrollTop)

  handelscroll() {
      this.scrollTop = document.body.scrollTop|| document.documentElement.scrollTop || window.pageYOffset
  },

2.在created或者mounted钩子函数中绑定滚动事件记录记录滚动条位置的函数、在deactivated钩子函数中把滚动条位置存储到sessionStorage里

 document.addEventListener('scroll',this.handelscroll)
 deactivated (){
    console.log('执行deactivted钩子');
    sessionStorage.setItem('scrollTop',this.scrollTop.toString())
 },

3.在activated钩子函数中从sessionStorage里获取滚动条的高度并赋值给当前的滚动条即可

  doc.body.scrollTop =doc.documentElement.scrollTop = window.pageYOffset =Number(sessionStorage.getItem('scrollTop'));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值