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下的keyCode键码值表
Apr 10 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
原生Javascript封装的一个AJAX函数分享
Oct 11 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
三种方式实现瀑布流布局
Feb 10 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
Nov 27 Javascript
基于React+Redux的SSR实现方法
Jul 03 Javascript
Ant Design Pro 之 ProTable使用操作
Oct 31 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程序?
2006/12/08 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
2018/09/12 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
Python进阶-函数默认参数(详解)
2017/05/18 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python实现端口检测的方法
2018/07/24 Python
用pycharm开发django项目示例代码
2018/10/24 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
python 三元运算符使用解析
2019/09/16 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
python request 模块详细介绍
2020/11/10 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
高中生自我鉴定范文
2013/10/30 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
预备党员的自我评价
2014/03/12 职场文书
产品开发计划书
2014/04/27 职场文书
大学生新学期计划书
2014/04/28 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
python数字转对应中文的方法总结
2021/08/02 Python