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 相关文章推荐
javascript new fun的执行过程
Aug 05 Javascript
jquery插件之easing 动态菜单
Aug 21 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
Apr 15 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
javascript日期格式化方法汇总
Oct 04 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
基于jQuery实现页面搜索功能
Mar 26 Javascript
javascript入门之window对象【新手必看】
Nov 22 Javascript
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
浅谈关于vue中scss公用的解决方案
Dec 02 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php截取字符串函数分享
2015/02/02 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
JS实现的贪吃蛇游戏案例详解
2019/05/01 Javascript
Python文件和流(实例讲解)
2017/09/12 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
2014年小学少先队工作总结
2014/12/18 职场文书
项目合作意向书
2015/05/08 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
redis限流的实际应用
2021/04/24 Redis
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB