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 相关文章推荐
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
Sep 24 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
javascript弹出窗口中增加确定取消按钮
Jun 24 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
JS设置CSS样式的方式汇总
Jan 21 Javascript
将angular.js项目整合到.net mvc中的方法详解
Jun 29 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 Javascript
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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
如何冲泡挂耳包咖啡?技巧是什么
2021/03/04 冲泡冲煮
建站常用13种PHP开源CMS比较
2009/08/23 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
JS之Date对象和获取系统当前时间详解
2014/01/13 Javascript
iframe实用操作锦集
2014/04/22 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
Python isinstance函数介绍
2015/04/14 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python模拟用户登录验证
2017/09/11 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
python实现大文本文件分割
2019/07/22 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python os.fork() 循环输出方法
2019/08/08 Python
Python实现爬取并分析电商评论
2020/06/19 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
英国领先的葡萄酒专家:Majestic Wine
2017/05/30 全球购物
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
军训自我鉴定200字
2014/02/13 职场文书
竞聘书格式及范文
2014/03/31 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
电子专业求职信
2014/06/19 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
《花钟》教学反思
2016/02/17 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript