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控制frame,iframe的src属性代码
Dec 31 Javascript
JAVASCRIPT函数作用域和提前声明 分享
Aug 22 Javascript
在javaScript中关于submit和button的区别介绍
Oct 20 Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
Jan 08 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
Jan 26 Javascript
JS实现将二维数组转为json格式字符串操作示例
Jul 12 Javascript
jQuery实现基本隐藏与显示效果的方法详解
Sep 05 jQuery
vue自定义全局共用函数详解
Sep 18 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
详解python中的线程
2018/02/10 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python global关键字的用法详解
2019/09/05 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
python中Django文件上传方法详解
2020/08/05 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
工商管理应届生求职信
2013/10/07 职场文书
车间主管岗位职责
2013/11/14 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
暑期政治学习心得体会
2014/09/02 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
党员个人总结自评
2015/02/14 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
MySQL数据库简介与基本操作
2022/05/30 MySQL