Vue 实现前进刷新后退不刷新的效果


Posted in Javascript onJune 14, 2019

需求一:

在一个列表页中,第一次进入的时候,请求获取数据。

点击某个列表项,跳到详情页,再从详情页后退回到列表页时,不刷新。

也就是说从其他页面进到列表页,需要刷新获取数据,从详情页返回到列表页时不要刷新。

解决方案在 app.vue 设置:

<keep-alive include="list">
<router-view/>
</keep-alive>

假设列表页为 list.vue ,详情页为 detail.vue ,这两个都是子组件。

我们在 keep-alive 添加列表页的名字,缓存列表页。

然后在列表页的 created 函数里添加ajax请求,这样只有第一次进入到列表页的时候才会请求数据,当从列表页跳到详情页,再从详情页回来的时候,列表页就不会刷新。

这样就可以解决问题了。

需求二:

在需求一的基础上,再加一个要求:

可以在详情页中删除对应的列表项,这时返回到列表页时需要刷新重新获取数据。

我们可以在路由配置文件上对 detail.vue 增加一个 meta 属性。

{
  path:'/detail',
  name:'detail',
  component:() => import('../view/detail.vue'),
  meta:{ isRefresh:true }
}

这个 meta 属性,可以在详情页中通过 this.$route.meta.isRefresh 来读取和设置。 设置完这个属性,还要在 App.vue 文件里设置 watch 一下 $route 属性。

watch:{
  $route(to, from) {
    const fname = from.name
    const tname = to.name
    if (from.meta.isRefresh || (fname != 'detail' && tname == 'list')) {
      // 在这里重新请求数据
      from.meta.isRefresh = false
    }
  }
}

这样就不需要在列表页的 created 函数里用 ajax 来请求数据了,统一放在 App.vue 里来处理。

触发请求数据有两个条件:

  1. 从其他页面(除了详情页)进来列表时,需要请求数据。
  2. 从详情页返回到列表页时,如果详情页 meta 属性中的 isRefresh 为 true ,也需求重新请求数据。

当我们在详情页中删除了对应的列表项时,就可以将详情页 meta 属性中的 isRefresh 设为 true 。这时再返回到列表页,页面会重新刷新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery 插件学习(六)
Aug 06 Javascript
JS动态获取当前时间,并写到特定的区域
May 03 Javascript
JS性能优化笔记搜索整理
Aug 21 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
JS判断字符串包含的方法
May 05 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
Oct 25 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
基于Three.js插件制作360度全景图
Nov 29 Javascript
原生JavaScript实现Ajax异步请求
Nov 19 Javascript
Vue触发式全局组件构建的方法
Nov 28 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
Jan 24 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 #Javascript
移动端底部导航固定配合vue-router实现组件切换功能
Jun 13 #Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 #Javascript
vue路由插件之vue-route
Jun 13 #Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 #Javascript
详解vuex之store源码简单解析
Jun 13 #Javascript
vue store之状态管理模式的详细介绍
Jun 13 #Javascript
You might like
php生成静态页面的简单示例
2014/04/17 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
vue实现鼠标经过动画
2019/10/16 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python实现微信自动回复功能
2018/04/11 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
民族团结先进个人事迹材料
2014/06/02 职场文书
消防工作实施方案
2014/06/09 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
表扬信格式模板
2015/05/05 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书