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来定位
Feb 20 Javascript
js常用代码段整理
Nov 30 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
js强制把网址设为默认首页
Sep 29 Javascript
浅析JavaScript中作用域和作用域链
Dec 06 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
Apr 13 Javascript
vue弹窗消息组件的使用方法
Sep 24 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
解决Vue router-link绑定事件不生效的问题
Jul 22 Javascript
vue+springboot+element+vue-resource实现文件上传教程
Oct 21 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
php导出CSV抽象类实例
2014/09/24 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
Python中实现switch功能实例解析
2018/01/11 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
毕业生机械建模求职信
2013/10/14 职场文书
运动会广播稿200字
2014/01/15 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android
Go web入门Go pongo2模板引擎
2022/05/20 Golang