vue实现前进刷新后退不刷新效果


Posted in Javascript onJanuary 26, 2018

最近在用vue尝试着做移动端的项目。希望实现前进刷新、后退不刷新的效果。即加载过的界面能缓存起来(返回不用重新加载),关闭的界面能被销毁掉(再进入时重新加载)。例如对a->b->c 前进(b,c)刷新,c->b->a 后退(b,a)不刷新。

由于 keep-alive 会把所有加载的过的界面都缓存起来,没法实现返回时将界面销毁掉,导致再进入时没有重新加载这个界面。于是首先想到的方案是在点击界面上返回按钮的时候,调用 this.$destroy(true) 来将界面销毁掉。但是在移动端 android设备上会有物理返回键,如果通过物理返回键返回的话,就没法处理了。虽然可以重写android的返回事件,来调用js的方法,但是调用的是js的全局方法,没法具体让在最上层的那个界面销毁掉。

于是就需要另辟蹊径了。还好这篇文章给了我启发 vue-router 之 keep-alive ,多谢作者的分享。

要是能够知道路由是前进还是后退就好了,这样的话我就能在后退的时候让 from 路由的 keepAlive 置为 false , to 路由的 keepAlive 置为 ture ,就能在再次前进时,重新加载之前这个 keepAlive 被置为 false 的路由了。

废话不多说了,这里模拟有三个界面 login 到 server 到 main 。

首先我给这三个界面路由的 path 设置了严格的层级关系 ,并设置keepAlive都是true,默认都是需要缓存。

const router = new Router({
 routes: [
  {
   path: '/',
   redirect: '/login'
  },
  {
   path: '/login',
   component: Login,
   meta: {
    keepAlive: true
   }
  },
  {
   path: '/login/server',
   component: ServerList,
   meta: {
    keepAlive: true
   }
  },
  {
   path: '/login/server/main',
   component: Main,
   meta: {
    keepAlive: true
   }
  }
 ]
})

由于这三个界面path的层级不同,我就能通过 beforeEach 这个钩子判断出什么时候是后退了。在后退时将 from 路由的 keepAlive 置为 false , to 路由的 keepAlive 置为 ture 。

router.beforeEach((to, from, next) => {
 const toDepth = to.path.split('/').length
 const fromDepth = from.path.split('/').length
 if (toDepth < fromDepth) {
  console.log('后退。。。')
  from.meta.keepAlive = false
  to.meta.keepAlive = true
 }
 next()
})

最后需要缓存的界面用 keep-alive 包起来,就能实现时前进刷新,后退时不刷新的效果了。

<keep-alive>
     <router-view v-if="$route.meta.keepAlive">
      <!-- 这里是会被缓存的视图组件 -->
     </router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive">
     <!-- 这里是不被缓存的视图组件 -->
    </router-view>

总结

以上所述是小编给大家介绍的vue实现前进刷新后退不刷新效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用cssText批量修改样式
Aug 29 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
Jan 08 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
谈谈JavaScript中function多重理解
Aug 28 Javascript
详解JavaScript操作HTML DOM的基本方式
Oct 21 Javascript
jquery制作属于自己的select自定义样式
Nov 23 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
JS调用Android、Ios原生控件
Jan 06 Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 Javascript
微信小程序 两种为对象属性赋值的方式详解
Feb 23 Javascript
JS实现520 表白简单代码
May 21 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
May 19 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 #Javascript
微信小程序实现图片压缩功能
Jan 26 #Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
Jan 25 #Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 #Javascript
jquery根据name取得select选中的值实例(超简单)
Jan 25 #jQuery
用jquery获取select标签中选中的option值及文本的示例
Jan 25 #jQuery
利用js给datalist或select动态添加option选项的方法
Jan 25 #Javascript
You might like
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
php判断当前操作系统类型
2015/10/28 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
js对象的比较
2011/02/26 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
Python随机生成彩票号码的方法
2015/03/05 Python
使用Python生成XML的方法实例
2017/03/21 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
python 实现屏幕录制示例
2019/12/23 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python中的面向接口编程示例详解
2021/01/17 Python
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
运动会领导邀请函
2014/01/10 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
自查自纠整改报告
2014/11/06 职场文书
家长意见书
2015/06/04 职场文书
2015国庆节感想
2015/08/04 职场文书