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 相关文章推荐
jquery动态加载js/css文件方法(自写小函数)
Oct 11 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
Jquery跨域获得Json的简单实例
May 18 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
vuex的简单使用教程
Feb 02 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
通过函数作用域和块级作用域看javascript的作用域链
Aug 05 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 Javascript
React如何实现浏览器打印部分内容详析
May 19 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
Jul 22 Javascript
JavaScript实现筛选数组
Mar 02 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中将汉字转换成拼音的函数代码
2012/09/08 PHP
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
jquery异步循环获取功能实现代码
2010/09/19 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python2.7实现邮件发送功能
2018/12/12 Python
python批量获取html内body内容的实例
2019/01/02 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
python挖矿算力测试程序详解
2019/07/03 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
python温度转换华氏温度实现代码
2020/12/06 Python
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
个人安全生产责任书
2014/07/28 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书