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 相关文章推荐
css3元素简单的闪烁效果实现(html5 jquery)
Dec 28 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
详解javascript的变量与标识符
Jan 04 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
利用Angular.js限制textarea输入的字数
Oct 20 Javascript
Vue概念及常见命令介绍(1)
Dec 08 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
JavaScript实现打印星型金字塔功能实例分析
Sep 27 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
js根据json数据中的某一个属性来给数据分组的方法
Oct 08 Javascript
js计时事件实现圆形时钟
Mar 25 Javascript
微信小程序如何实现点击图片放大功能
Jan 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
VOLVO车载收音机
2021/03/02 无线电
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
Python科学计算环境推荐——Anaconda
2014/06/30 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python3 实现口罩抽签的功能
2020/03/11 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
妇女儿童发展规划实施方案
2014/03/16 职场文书
产品发布会策划方案
2014/05/12 职场文书
公司合作意向书范文
2014/07/30 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
博物馆观后感
2015/06/05 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏