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 相关文章推荐
LBS blog sql注射漏洞[All version]-官方已有补丁
Aug 26 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
Oct 10 Javascript
微信小程序-小说阅读小程序实例(demo)
Jan 12 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
jQuery实现的简单歌词滚动功能示例
Jan 07 jQuery
详解VUE单页应用骨架屏方案
Jan 17 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 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
php下MYSQL limit的优化
2008/01/10 PHP
php 数组使用详解 推荐
2011/06/02 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
JavaScript实现简单动态表格
2020/12/02 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python数据归一化及三种方法详解
2019/08/06 Python
python实现文件的分割与合并
2019/08/29 Python
农药学硕士毕业生自荐信
2013/09/25 职场文书
中学家长会邀请函
2014/01/17 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
机械操作工岗位职责
2014/08/08 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
如何在C++中调用Python
2021/05/21 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL