业务场景:移动端一个列表页下拉到某个位置时,点击其中一条数据进入详情页,再从详情页返回列表页时,还是在原来的位置。

实现:

  • 1、在App.vue中加上keep-alive缓存组件。
 <keep-alive><router-view v-if="$route.meta.keepAlive"></router-view>   // 路由配置keepAlive属性为true时,需要缓存</keep-alive><router-view v-if="!$route.meta.keepAlive"></router-view> // 路由配置keepAlive属性为false时,不需要缓存
  • 2、在需要缓存的页面的路由配置中。
{path: '/testPath',name: 'testName',meta: {title: 'testTitle',tabbar: false,keepAlive: true    // 在需要用到缓存的页面的meta里设置keepAlive为true},component: () => import('@/views/components/testFile')
}
  • 3、在需要缓存的页面文件中。

首先,配置了keep-alive的文件不会执行 created() 和 mounted(),而是执行 activated() 和 deactivated() 这两个生命周期钩子函数。

activated() 在页面进入时调用,deactivated() 在页面退出时调用。

beforeRouteEnter(to, from, next) {next((vm) => {vm.from = from// 我这里该页面处于二级页面,三级页面返回时需要缓存,一级页面进入时需要执行getList()方法获取数据// 注意:beforeRouteEnter不能通过this访问组件实例,要通过 vm 访问。因为当钩子执行前,组件实例还没被创建。// 执行顺序:beforeRouteEnter => created => mounted => beforeRouteEnter的next()if (from.meta.keepAlive !== false) {vm.list = []vm.temp = {pageNum: 1,pageSize: 10}vm.type = vm.$route.query.typevm.getList()window.addEventListener('scroll', vm.handleScroll, true)   // 监听滚动事件}})
},
created() { },
mounted() { },
activated() {if (this.scroll > 0) {var body = document.getElementsByClassName('container')[0]body.scrollTo(0, this.scroll)    // 滚动到缓存的scroll值的位置this.scroll = 0}window.addEventListener('scroll', this.handleScroll, true)
},
deactivated() {window.removeEventListener('scroll', this.handleScroll, true)  // 页面退出时关闭事件,防止其他页面出现问题
},
...
handleScroll() {// 记录滚动位置this.scroll = document.getElementsByClassName('container')[0].scrollTop;console.log('scrollTop', this.scroll)
}

vue使用keep-alive缓存页面 回到滚动位置相关推荐

  1. vue 页面A转到页面B,B页面停留在A页面的滚动位置

    如果页面A沿Y轴滚动一段距离,然后跳转到页面B;在进入B页面时,B页面已经滚动到页面A的距离,返回页面A,发现A还在之前的滚动位置: 在路由守卫回调中,设置每次进入路由时,将window的scroll ...

  2. Vue路由开启keep-alive缓存页面

    mode:hash模式下: HTML部分: <template><div id="app"><keep-alive> <!--使用keep ...

  3. vue中进入详情页记住列表滚动位置keep-alive解决

    一.配置路由 keepactice:true {path: '/index',name: 'index',component: index,meta: {keepalive: true // 组件是否 ...

  4. ASP.NET小技巧——回传后保持页面的滚动位置

    今天在MSDN上看到一篇文章,关于如何在ASP.NET页面回传后保持当前的滚动(垂直)位置. 这个技巧挺实用的,在此做简单的翻译介绍. 默认情况下,ASP.NET页面回传到服务器后,页面会跳回顶部. ...

  5. vue缓存页面【二】

    keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 在keep-ali ...

  6. 基于vue的移动web app页面缓存解决方案

    现在移动web app越来越热门了,许多公司开始尝试使用angular.react.vue等MVVM框架来开发单页架构的web app.但在开发web app时,如果希望页面的导航体验也接近原生应用, ...

  7. vue 记录滚动位置_vue 路由跳转记住滚动位置,返回时回到上次滚动位置

    方法一: 利用Keep-Alive和监听器 1.首先在路由中引入需要的模块 { path: '/scrollDemo', name: 'scrollDemo', meta: { keepAlive:t ...

  8. vue中多个路由页面切换造成滚动互相影响问题的解决

    一.问题描述 在vue的项目开发中,出现了这样的问题.在进入一个路由页面的时候,进行了页面滚动,滚动的位置会被缓存.当离开页面以后,下次再进入一个页面的时候,切换新路由,发现默认进入的位置就是之前滚动 ...

  9. Vue 切换路由后页面回到页面顶部

    Vue 切换路由后页面回到页面顶部 backTop() {window.scrollTo(0, 0)document.body.scrollTop = 0document.documentElemen ...

最新文章

  1. document操作例题1-延迟注册与二级菜单
  2. Quibi:我轻轻地咬一口 你最爱的Netflix和TikTok
  3. Linux系统rootpassword改动
  4. 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用
  5. [Java开发]打印当前路径到控制台
  6. 第三十三期:对于人工智能的恐惧及其5个解决方法
  7. 惊呆!不用一张图片,却训出个图像识别SOTA?
  8. php 连接sap rfc 乱码,[RFC] sap rfc调用时判断连接状态
  9. 本博已停用,现在的博客是www.mutousay.com
  10. zookeeper的安装集群版
  11. python怎么一次输入两个数_python如何一次性输入多个数
  12. 用Latex beamer做poster经验总结
  13. Macbook OBS 录制系统声音
  14. 老范的Bug跟踪管理系统0.1 Alpha——介绍篇
  15. 我有一个梦想(I have a dream)
  16. 近几个月Github上最热门的Java项目一览
  17. 拼团返利电商系统(拼返系统)v2.6
  18. 嫁人当嫁处女男 - 解构处女座男人
  19. Excel高级使用技巧
  20. 知乎:在卡内基梅隆大学 (Carnegie Mellon University) 就读是怎样一番体验?

热门文章

  1. 高中计算机手抄报图片大全集,高中生手抄报版面图大全
  2. arduino 版 PID 算法模板(程序可直接套模板实用)
  3. linux下weblogic新建域domian
  4. 10款暗色质感和黑白效果LR预设
  5. 物联网推进水产养殖业标准化规模化进程
  6. Windows 好用的软件安装清单 持续更新
  7. OpenSSH之Windows账户访问操作
  8. 多个PDF文件怎么合并?PDF合并的方法教程
  9. lotus version 0.3.0+git1bfa2311 安装 interopnet
  10. 「镁客·请讲」打造一台眼睛专属“跑步机”,鹰视菲诺是如何用AI拯救近视的?...