VUE框架真的很神奇,神奇到好多坑你都要填

这次说说VUE里缓存页面的问题

现在前端做APP的话,估计很少人会直接去用VUE cli来写,因为那样特别麻烦,你得配置很多东西。填很多坑!现在如果要求前端H5来做个APP,估计大家很多都会选择uniapp,MUI等这些主流框架,一套代码适配多端,很方便。

接下来就说说,vue cli做APP遇到的问题,页面缓存

因为总会要做到A-B,B选择完或者处理完业务返回到A,大家都知道,VUE默认是会销毁页面的,就是一般情况下,A->B页面,C回B页面后,A其实已经重新刷新渲染了,你之前填写的数据就会没了,但是我们需要的是我在A页面填写完东西,在不请求保存接口都时候我要留着数据在页面,还需要去B页面拿取一些数据返回A显示。这时候就要做到页面缓存了。

刚开始我用的仅仅是判断keep-alive

 <div id="app"><keep-alive><router-view v-if='$route.meta.keepAlive' class="view"></router-view></keep-alive><router-view v-if='!$route.meta.keepAlive' class="view"></router-view>
</div>

然后再去缓存的页面判断

//路由守卫判断前进后退是否保存
beforeRouteLeave(to, from, next) {if (to.path == "/B") {from.meta.keepAlive = true;}else{from.meta.keepAlive = false;}next();
},

最后发现这样的方式虽然简单,但是容易出bug,就是我返回的时候其实他这个页面并没有清除缓存,当你再次进入缓存的B页面,再进入下一个C页面返回的时候,B页面就会把上一次的东西带出来了,相当于,把上一次的缓存拿过来了,这样的方式很不好,最后查阅资料,发现还是用vuex加include好用,并且没有什么bug,缓存点设置和清除都很好
下面是代码

//-------router.js----------//在你配置路由的页面,设置好keepAlive和index{path:'/A',name:'A',components:Home,meta:{keepAlive:true //需要被缓存的组件index:1       //下标,标识},{path:'/B',name:'B',components:Book,meta:{keepAlive:false, //不需要被缓存的组件index:2      } 
 //----App.vue------//在app.vue里面,在keep-alive里加入include,可以看看vue官网keep-alive的说明文档<div id="app"><keep-alive :include="keepAlive"><router-view class="view"></router-view></keep-alive></div>js部分加入computed: {keepAlive() {return this.$store.getters.keepAlive    //将页面存入vuex}},
//vuex里面加入keepalive相关import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {keepAlive: []},mutations: {setKeepAlive: (state, keepAlive) => {state.keepAlive = keepAlive}},getters: {keepAlive: state => state.keepAlive}
})export default store//main.js引入这个js文件

接下来就是处理缓存页面和清除缓存了

//在A页面用路由守卫处理
beforeRouteLeave(to, from, next) {if(to.name.indexOf('A') > -1) {this.$store.commit('setKeepAlive', [])   //清除缓存}else{this.$store.commit('setKeepAlive', ['B']);  //设置缓存}next()
},

这样就可以实现页面缓存的效果了,
如果有人不起作用,你一定要看看你缓存的那个页面,有没有加name=“B”,因为include认的是页面的name,必须保持一致

还有人可能想问,A->B->C,我想B缓存,B去C处理业务缓存B,B返回A清空缓存,怎么弄?
其实一样的,只需要在A页面的跳转B页面的方法里加上

//把B页面缓存起来
this.$store.commit('setKeepAlive', ['B'])

然后缓存B的方法跟上面缓存A的一样就行;

如果有错误的地方,欢迎指正。

vue 路由页面缓存相关推荐

  1. vue tab页面缓存处理

    vue tab页面缓存处理 问题:使用vant 框架.底部导航切换,tab页面缓存 解决: 1.index 页面 xml 设置 <keep-alive><router-view v- ...

  2. vue 删除页面缓存_vue项目强制清除页面缓存的例子

    异常描述: 支付宝中内嵌h5项目(vue框架开发),前端重新打包上传之后访问页面会导致页面空白.页面tab点击异常之类异常情况,需要手动清除支付宝缓存才可以正常访问. 解决方案: 在HTTP协议中,只 ...

  3. 【vue】页面缓存回跳后 侧边栏z-index层级导致页面快闪

    问题描述 公司使用的帆软报表页面没有加keepAlive缓存,在从一个弹框页面跳转到子报表后,切换路由回到当前页面是会继续展示弹框页面,但是页面由于z-index层级问题会闪一下. 问题排查 经过代码 ...

  4. vue中页面缓存后destroyed失效,如何关闭定时器

    场景 页面中设置了定时器,如果组件销毁是没有关闭定时器,他还会一直执行,会非常耗性能,所以需要及时关闭定时器. 关闭定时器 vue项目中,正常情况下,我们在生命周期 destroyed 中关闭即可,一 ...

  5. vue切换路由页面数据缓存_Vue-Router实现前端页面缓存

    一.使用情景 在使用Vue开发单页面应用时,我们通常会使用Vue-Router进行页面导航,Vue-Router在进行路由切换的时候,页面是会重新加载,对应的生命周期函数也会再次执行一遍,但是在有些业 ...

  6. Vue路由开启keep-alive缓存页面

    mode:hash模式下: HTML部分: <template><div id="app"><keep-alive> <!--使用keep ...

  7. keep-alive的深入理解与使用(配合router-view缓存整个路由页面)

    原文来自: http://blog.myweb.kim/vue/keep-alive/?utm-source=origin 转载请注明出处. 在搭建 vue 项目时,有某些组件没必要多次渲染,所以需要 ...

  8. ios 销毁当前页面重新开启_利用Vue中keep-alive,快速实现页面缓存

    keep-alive 有时候我们不希望组件被重新渲染影响使用体验:或者处于性能考虑,避免多次重复渲染降低性能.而是希望组件可以缓存下来,维持当前的状态.这时候就可以用到keep-alive组件. 官网 ...

  9. vue index.html 缓存,解决vue单页面 回退页面 keeplive 缓存问题

    场景:项目中遇到 vue 点击回退 从A页跳到B页,缓存A页,当B页状态修改再次返回A时,A页查询条件缓存不刷新,列表刷新 A页: B页: 解决方法: 利用keep-alive 缓存需要缓存的页面 1 ...

最新文章

  1. 镜像处理坐标 android,Android应用开发之Android重写ImageView实现图片镜像效果的代码教程...
  2. 玩转“网上邻居”之WINS解析(一)
  3. Windows 动态链接库DLL浅解
  4. 【maven插件】asciidoctor-maven-plugin:编译Asciidoc
  5. IComparer实现文件名排序
  6. Maven中dependencyManagement标签和dependencies的区别
  7. mysql 分页查询几种语法_各数据库2种分页语法支持
  8. 微软物联网平台再推新!
  9. 正向代理、透明代理、反向代理的理解示意图
  10. 计算机大写改成拼音形式,拼音转换
  11. idea中html导入背景图片,Intellij IDEA代码框使用自定义背景图片
  12. 知识树沉淀总结-领域驱动设计DDD
  13. HTML语言中代表网页标题的标签是,html标题标记 在html中,标题标签一共有几级?
  14. 学成在线 第4天 讲义-页面静态化 页面预览
  15. 设置CPU频率和CPU运行核心数
  16. jmeter实现UI自动化demo
  17. 综合练习Java算法
  18. 影响关键词排名的因素有哪些?
  19. 容器里源码安装apache
  20. bp神经网络是什么算法,BP神经网络的基本思想

热门文章

  1. window.open 打开vue路由,并监听页面关闭事件,监听子父页面消息传递
  2. 4月17号软件资讯更新合集.....
  3. golang 和python 代码里面文件路径拼接问题 /和\ 导致转义问题
  4. c语言itoa函数用指针怎么写,C语言中实现itoa函数的实例
  5. 在虚拟机的CentOS系统下安装pycharm的用户须知
  6. spring-activiti动态指定审批人及其设计思想
  7. 印加文明 Inca Civilization
  8. 软件项目成本评估中,关于接口开发的工作量评估有什么标准方法吗?
  9. ps创意合成,制作鲨鱼在橙子“海洋”里游泳的创意画面
  10. CSS权重中的越级现象