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 相关文章推荐
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
img onload事件绑定各浏览器均可执行
Dec 19 Javascript
JQuery实现级联下拉框效果实例讲解
Sep 17 Javascript
AngularJs动态加载模块和依赖注入详解
Jan 11 Javascript
动态加载js文件简单示例
Apr 21 Javascript
Vue动态实现评分效果
May 24 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 Javascript
使用react context 实现vue插槽slot功能
Jul 18 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数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
php分页查询的简单实现代码
2017/03/14 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
js中创建对象的几种方式
2017/02/05 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python实现RSA加密(解密)算法
2016/02/17 Python
简单实现python进度条脚本
2017/12/18 Python
python基于Selenium的web自动化框架
2019/07/14 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
python3中数组逆序输出方法
2020/12/01 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
毕业生欢送会主持词
2014/03/31 职场文书
大学生创业事迹材料
2014/12/30 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript