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实现给图片加链接
Aug 15 Javascript
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
JS在IE和FireFox之间常用函数的区别小结
Mar 12 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
jquery中插件实现自动添加用户的具体代码
Nov 15 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
Nov 04 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
微信小程序分包加载代码实现方法详解
Sep 23 Javascript
浅谈vue3中effect与computed的亲密关系
Oct 10 Javascript
javascript中的with语句学习笔记及用法
Feb 17 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
php5.3 废弃函数小结
2010/05/16 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
python抓取网页图片示例(python爬虫)
2014/04/27 Python
简单实现Python爬取网络图片
2018/04/01 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python实现的分层随机抽样案例
2020/02/25 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
python实现取余操作的简单实例
2020/08/16 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
安全生产承诺书范文
2014/05/22 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
出国留学自荐信模板
2015/03/06 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
2019职场单身人才调研报告:互联网行业单身比例最高
2019/08/07 职场文书