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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
获取当前网页document.url location.href区别总结
May 10 Javascript
用JavaScript显示随机图像或引用
Apr 21 Javascript
JQery 渐变图片导航效果代码 漂亮
Jan 01 Javascript
浅谈JavaScript 数据属性和访问器属性
Sep 01 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 Javascript
JS实现标签页切换效果
May 04 Javascript
js 只比较时间大小的实例
Oct 26 Javascript
vue2.0项目实现路由跳转的方法详解
Jun 21 Javascript
微信小程序云开发之模拟后台增删改查
May 16 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
javascript实现拖拽碰撞检测
Mar 12 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(三)
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
php微信开发之关注事件
2018/06/14 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
基于Python实现的ID3决策树功能示例
2018/01/02 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
使用Python实现牛顿法求极值
2020/02/10 Python
python目标检测给图画框,bbox画到图上并保存案例
2020/03/10 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
使用django自带的user做外键的方法
2020/11/30 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
文明学生标兵事迹
2014/01/21 职场文书
区三好学生主要事迹
2014/01/30 职场文书
五四青年节的活动方案
2014/08/20 职场文书
学校周年庆活动方案
2014/08/22 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL