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 非图片动态loading效果实现代码
Apr 09 Javascript
JavaScript 数组运用实现代码
Apr 13 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
js 设置缓存及获取设置的缓存
May 08 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
解决layui动态添加的元素click等事件触发不了的问题
Sep 20 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 Javascript
vue基于Teleport实现Modal组件
May 31 Vue.js
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
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 reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
laravel使用数据库测试注意事项
2020/04/10 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
jQuery插件编写步骤详解
2016/06/03 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
jquery dataview数据视图插件使用方法
2016/12/23 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
JS中this的4种绑定规则详解
2020/02/04 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
详解python实现线程安全的单例模式
2018/03/05 Python
python 获取图片分辨率的方法
2019/01/08 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
夫妻吵架保证书
2015/05/08 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL