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 相关文章推荐
纯js实现瀑布流展现照片(自动适应窗口大小)
Apr 08 Javascript
浅析node.js中close事件
Nov 26 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 Javascript
全面解析Javascript无限添加QQ好友原理
Jun 15 Javascript
再谈javascript常见错误及解决方法
Sep 16 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 Javascript
jquery精度计算代码 jquery指定精确小数位
Feb 06 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
vue中添加mp3音频文件的方法
Mar 02 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
Mar 26 Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 Javascript
Node.js实现断点续传
Jun 23 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中$_SERVER的详细参数与说明
2008/07/29 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
JS实现判断数组是否包含某个元素示例
2019/05/24 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
详解Django的CSRF认证实现
2018/10/09 Python
python添加菜单图文讲解
2019/06/04 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
2014年教师工作总结
2014/11/10 职场文书
2014年医院工作总结
2014/11/20 职场文书
2015年办公室人员工作总结
2015/05/15 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL