vue中keep-alive,include的缓存问题


Posted in Javascript onNovember 26, 2019

前提:有A,B,C,D四个页面,A是按钮页(点击按钮进入B页面),B是订单列表页,C是订单详情页,D是费用详情页

需求:顺序是A->B->C->D,每次都刷新页面,D->C->B时走缓存,但是每次从A到B都要刷新B页面,从B到C需要刷新C页面,从C到D要刷新D页面

在vue官方文档2.1以上有include 和 exclude 属性允许组件有条件地缓存。在这里主要用include结合vuex来实现(四个页面组件都有自己的name才会生效,这里name就叫A,B,C,D)

从D->C,从C->B,从B->A 可以写一个公共的头部返回组件,统一使用 this.$router.go(-1)返回前一页

App.vue

<template>
 <div class="app">
  <keep-alive :include="keepAlive" >
   <router-view/>
  </keep-alive>
 </div>
</template>

<script type='text/javascript'>
export default {
 data () {
  return {}
 },
 computed: {
  keepAlive () {
   return this.$store.getters.keepAlive
  }
 }
}
</script>

store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
 state: {
  keepAlive: []
 },
 mutations: {
  SET_KEEP_ALIVE: (state, keepAlive) => {
   state.keepAlive = keepAlive
  }
 },
 getters: {
  keepAlive: state => state.keepAlive
 }
})

每次进入B页面时先初始化 keepAlive(设置要走缓存的页面)

A.vue

<script>
  export default {
    name: 'A',
    methods: {
      buttonClick () {
        this.$store.commit('SET_KEEP_ALIVE', ['B', 'C', 'D']) 



  this.$router.push('/B') 



 } 


 } 

}
</script>

B.vue 该页面用来设置缓存和清除缓存

<script>
  export default {
    name: 'B',
    beforeRouteEnter (to, from, next) {
      next(vm => {
        if (from.path.indexOf('C') > -1) {
          vm.$store.commit('SET_KEEP_ALIVE', ['B'])
        }
      })
    },
    beforeRouteLeave (to, from, next) {
      if (to.path.indexOf('C') > -1) {
        this.$store.commit('SET_KEEP_ALIVE', ['B', 'C'])
      } else if (to.path.indexOf('A') > -1) {



 this.$store.commit('SET_KEEP_ALIVE', []) 
      }
      next()
    }
 }
</script>

到这里就实现了需求

PS:vue keep-alive include无效

检查版本

确定当前的vue版本的是2.1+

因为include和exclude是vue2.1.0新增的两个属性.

package.json

"vue": "^2.5.2",

检查name

注意,不是router.js中的name,而是单个vue组件中的name属性.

建议将router.js中的name和vue组件的name保持一致,不要混乱.

export default {
  name: "index"
}

多层嵌套

网上的答案几乎都是检查vue组件的name属性,但还是有一个巨坑.

那就是多级嵌套<router-view></router-view>,但凡有超过两个以上的router-view且是父子级关系,请都加上keep-alive,只加一个不会生效.

// app.vue
<keep-alive include="app,index">
  <router-view></router-view>
</keep-alive>

// other.vue
<keep-alive include="app,index">
  <router-view></router-view>
</keep-alive>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 构造函数,公有,私有特权和静态成员定义方法
Nov 30 Javascript
js 自定义的联动下拉框
Feb 07 Javascript
jQuery 改变CSS样式基础代码
Feb 11 Javascript
js内存泄露的几种情况详细探讨
May 31 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
Nov 17 Javascript
简述JavaScript中正则表达式的使用方法
Jun 15 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 Javascript
详解jquery事件delegate()的使用方法
Jan 25 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
详解element-ui中el-select的默认选择项问题
Aug 02 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
Nov 26 #Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
Nov 26 #jQuery
原生js实现贪食蛇小游戏的思路详解
Nov 26 #Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 #jQuery
JavaScript计算正方形面积
Nov 26 #Javascript
javaScript中indexOf用法技巧
Nov 26 #Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
Nov 25 #Javascript
You might like
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP7 弃用功能
2021/03/09 PHP
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
2013/04/26 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
简明 Python 基础学习教程
2007/02/08 Python
跟老齐学Python之Python安装
2014/09/12 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
python递归全排列实现方法
2018/08/18 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
python基于win32api实现键盘输入
2020/12/09 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
三严三实对照检查材料
2014/08/25 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python