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的checkbox下拉框插件代码
Jun 25 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
Mar 19 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
jQuery中toggle()函数的使用实例
Apr 17 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
Jun 19 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
详解webpack编译多页面vue项目的配置问题
Dec 11 Javascript
vue导出html、word和pdf的实现代码
Jul 31 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
Aug 06 Javascript
Angular resolve基础用法详解
Oct 03 Javascript
vue移动端屏幕适配详解
Apr 30 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
PHP中4种常用的抓取网络数据方法
2015/06/04 PHP
实现PHP搜索加分页
2016/10/12 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
PHP实现文件上传后台处理脚本
2020/03/04 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
js实现简单的星级选择器提交效果适用于评论等
2013/10/18 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
DOM基础教程之使用DOM
2015/01/19 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
详解vue中组件参数
2018/07/09 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
晚会主持人开场白台词
2015/05/28 职场文书
闪闪的红星观后感
2015/06/08 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书