从列表页 ------> 详情页, 再从详情页 -----> 列表页 ,要保存上次已经加载的数据和自动还原上次的浏览位置

1. 缓存组件,vue2中提供了keep-alive。首先在我们的app.vue中定义keep-alive:

2. 下面在router.js即我们的路由文件中,定义meta信息

// news 是列表页

{

path: '/news ',

name: 'news ',

component: resolve => require(['@/view/news'], resolve),

meta: {

keepAlive: true // 通过此字段判断是否需要缓存当前组件

}

},

这里采用路由懒加载,也可以使用 import 来导入,无关紧要,接着看下面

2.缓存数据的实现

简单了解一下缓存相关的vue钩子函数。

设置了keepAlive缓存的组件:

第一次进入:beforeRouterEnter > created > … > activated->…->deactivated 后续进入时:beforeRouterEnter > activated > deactivated

可以看出,只有第一次进入该组件时,才会走created钩子,而需要缓存的组件中activated是每次都会走的钩子函数。所以,我们要在这个钩子里面去判断,当前组件是需要使用缓存的数据还是重新刷新获取数据.

3. 页面滚动位置的问题

我们知道,在vue这种单页应用中,如果你在a页面滚动了一段距离后,此时前往b页面后,b页面也会停留在a页面的滚动位置。这个问题的解决,我们可以利用router本身提供的功能来解决:

routes: [

{

path: '/detail',

name: 'Detail',

component: resolve => require(['@/view/detail'], resolve)

}

],

scrollBehavior (to, from, savedPosition) {

if (savedPosition) {

return savedPosition

} else {

if (from.meta.keepAlive) {

from.meta.savedPosition = document.body.scrollTop;

}

return { x: 0, y: to.meta.savedPosition || 0 }

}

}

scrollBehavior是路由提供的基础功能,这段函数写的是:

如果通过浏览器自带的前进后退按钮切换的路由,那么会自动使用浏览默认的回滚上次页面的浏览位置。

2.如果是通过vue路由进行的页面切换。例如a前往b,首先判断a是不是通过keep-alive缓存的组件,如果是,则在a路由的meta中添加一个savedPosition字段,并且值为a的滚动位置。最后return的是页面需要回滚的位置。如此一来,如果打开一个页面,该页面的组件路由中meta.savedPosition为undefined的话,则页面滚动到(0,0)的位置,这样解决了问题1。那么如果打开一个页面,它的路由的meta.savedPosition有值的话,则滚动到上次浏览的位置,因为meta.savedPosition保存的就是上次浏览的位置。

vue中的浏览量_vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践相关推荐

  1. vue项目实现详情页后退缓存之前的数据

    vue项目实现详情页后退缓存之前的数据 2019年02月19日 14:54:57 不想写代码的程序员 阅读数:244 一.需要缓存的内容: 1.后退缓存条件查询的数据 2.后退缓存分页信息 二.实现 ...

  2. vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践

    vue中,我们所要实现的一个场景就是: 1.搜索页面==>到搜索结果页时,搜索结果页面要重新获取数据, 2.搜索结果页面==>点击进入详情页==>从详情页返回列表页时,要保存上次已经 ...

  3. vue监听字符串长度_vue中的计算属性和侦听器

    计算属性概念 模板内的候通现端数是制这.效合应近环大过这业据的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护在重说道.础过学开概码数项遍间里哦行览屏屏 ...

  4. 在vue中实现picker样式_vue中van-picker的多列联动数据格式如何设置以及调用

    一开始看到van-picker的多列联动的例子时,脑子是懵逼的,我即将要用的数据不可能这么简单啊,这叫我咋用! 然后一顿苦思冥想,再深读文档内极其稀少的信息,最后在多次尝试后,终于把结果试出来了.没错 ...

  5. vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果

    https://github.com/woai3c/Front-end-articles​github.com 需求一: 在一个列表页中,第一次进入的时候,请求获取数据. 点击某个列表项,跳到详情页, ...

  6. vue暴露的全局方法_Vue中实现全局方法

    内心背景:今天偶然上到论坛,看到关于Vue的两篇阅读量破千,我TM膨胀了啊.赶快再写一篇我开始用Vue时遇到的问题. 现实背景:很多时候我们会在全局调用一些方法. 实现方式两种:官网的实现use方法, ...

  7. vue获取编辑器纯文字_vue中使用富文本编辑器

    前端使用富文本编辑器的插件有很多,今天献上wangeditor的使用教程,教你如何在vue中使用富文本编辑器 wangeditor是一个萌新富文本编辑器,基于js和css,重点在于它轻量,如果你需要的 ...

  8. vue 函数 路由跳转_vue中通过路由跳转的三种方式

    router-view 实现路由内容的地方,引入组件时写到需要引入的地方 需要注意的是,使用vue-router控制路由则必须router-view作为容器. 通过路由跳转的三种方式 1.router ...

  9. vue打印props的值_vue中props传值方法

    vue中props传值方法 1.开发环境 vue 2.电脑系统 windows10专业版 3.在使用 vue开发的过程中,我们经常会使用 props进行组件的传值,下面是我的分享,希望对你有所帮助! ...

最新文章

  1. 百度 和 AI教父Hinton 的故事
  2. Python操作mysql数据库查询操作时提示“unread-result-found”
  3. JavaScript 下载大文件解决方案(Blob+OjbectURL)
  4. linux 函数 缩小文件,linux文件系统的处理函数
  5. iOS获取缓存文件的大小并清除缓存
  6. 【C语言】qsort函数用法(转)
  7. 理论物理考研攻略!!!
  8. 打印机显示服务器连接错误怎么回事,打印机处于错误状态是怎么回事 打印机处于错误状态如何解决【图文详解】...
  9. 【老生谈算法】matlab实现K均值聚类算法——K均值聚类算法
  10. PS大神最全脑洞合集
  11. SiamRPN:利用区域建议孪生网络进行视频跟踪
  12. 石家庄发展史 9(转)
  13. nginx简单配置多个域名转向多个tomcat
  14. java的I/O流,开发教学第二章作业
  15. ASP.NET Core 导出Excel文件
  16. 青龙面板基本脚本运行必装依赖 一键式安装脚本安装依赖 2023年3月28日
  17. 苹果高管公然“开怼”:三星抄袭 iPhone,只加了个大屏
  18. 简单处理Ubuntu无法联网的问题
  19. jQuery之图片显示篇A
  20. 盛夏之梦A Dream of Summer 汉化发布[PC+PSP版]

热门文章

  1. jQuery (DOM篇)
  2. Windows 曝漏洞 —— 影响所有版本
  3. 《机器人学经典教程》——2.3 人工智能
  4. 第七篇:使用 CUDA 进行计算优化的两种思路
  5. tomcat端口占用后的解决办法
  6. Git Push 不用再次输入用户名和密码方法
  7. 图形验证码最佳攻略2
  8. 网站如何接入支付宝(转)
  9. oracle 10g数据库的异步提交
  10. EonerCMS——做一个仿桌面系统的CMS(三)