vue keep-alive

https://cn.vuejs.org/v2/api/#keep-alive

keep-alive 不生效的可能原因

如果安装官方的写法,已经正常完成keep-alive

<keep-alive :include="['a', 'b']">
<component :is="view"></component>
</keep-alive>
 

一级二级路由

请检查需要router 界面当前引入组件是否有name 属性, 下面Demo 的 Menu1

path: 'menu1',
component: () => import('@/views/demos/nested/menu1/index'), // Parent router-view
name: 'Menu1',

如果存在并被keep-alive的 include缓存['Menu1'],并且还没有生效
找到这个组件,看是否存在name

<script>
export default {
name: 'Menu1'
}
</script>

这个name 不存在,会导致找不到!   一定要注意,src/views 下面的vue 文件中的 name 一定要和 src/router/index.js 中的name 一直 ,否则标签页缓存不会生效

三级以及多级路由

当存在三级路由,会发现设置都没有问题,但就是不能解决问题,三级路由的界面无法缓存,据说是官方的原因,直接放三级路由是无法被keep-alive 执行生效,解决方案就是,把二级的路由name 和三级路由name 一块 放到include 内。

 {
// 一级路由
path: 'menu1',
component: () => import('@/views/demos/nested/menu1/index'), // Parent router-view
name: 'Menu1',
meta: { title: 'Menu 1' },
redirect: '/nested/menu1/menu1-1',
// 二级路由
children: [
{
path: 'menu1-2',
component: () => import('@/views/demos/nested/menu1/menu1-2'),
name: 'Menu1-2',
redirect: '/nested/menu1/menu1-2/menu1-2-1',
meta: { title: 'Menu 1-2' },
// 三级路由
children: [
{
path: 'menu1-2-1',
component: () => import('@/views/demos/nested/menu1/menu1-2/menu1-2-1'),
name: 'Menu1-2-1',
meta: { title: 'Menu 1-2-1' }
},
{
path: 'menu1-2-2',
component: () => import('@/views/demos/nested/menu1/menu1-2/menu1-2-2'),
name: 'Menu1-2-2',
meta: { title: 'Menu 1-2-2' }
}
]
},
{
path: 'menu1-3',
component: () => import('@/views/demos/nested/menu1/menu1-3'),
name: 'Menu1-3',
meta: { title: 'Menu 1-3' }
}
]
},

如果缓存的界面是 name为 Menu 1-2-1的界面, 需要缓存上一级路由name: ‘Menu1-2’ 即可以解决三级路由失败,如果是更多级(三级以上)的,也可以重复以上操作(具体没有试过)

<keep-alive :include="['Menu1-2', 'Menu 1-2-1']">
<router-view></route-view>
</keep-alive>

关于 怎么取到到父级路由的name, 可以通过vue router的 matched 属性获取,关于include数组具体的处理方式,看个人喜好了。
https://router.vuejs.org/zh/api/#%E8%B7%AF%E7%94%B1%E5%AF%B9%E8%B1%A1%E5%B1%9E%E6%80%A7

转载:https://www.jianshu.com/p/1bd9c3316a95

vue keep-alive 不生效和多级(三级以上)缓存失败的更多相关文章

  1. Vue部分编译不生效,解决Vue渲染时候会闪一下

    0828自我总结 Vue部分编译不生效,解决Vue渲染时候会闪一下 一.Vue编译不生效 在标签里添加v-pre <script src="vue.js"></s ...

  2. 在vue中如何实现购物车checkbox的三级联动

    最近用vue写一个电商项目,自然就少不了要写一个购物车的相关页面,功能完整的购物车的checkbox应该是三级联动的,1级checkbox是选中购物车中所有的商品,2级checkbox是选中某个店铺下 ...

  3. vue+element UI递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

  4. vue利用keep-alive/beforeRouteLeave前进刷新后退不刷新(缓存)

      keep-alive缓存 在vue中默认router-link进入页面组件都是不缓存的.对于数据不会更新的页面.可以使用keep-alive来缓存以提高性能. 在项目src/router/inde ...

  5. Vue生命周期和钩子函数及使用keeplive缓存页面不重新加载

    Vue生命周期 每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期,在这个过程中会有一些钩子函数会得到回调 Vue中能够被网页直接使用的最小单位就是组件,我们经常写的: ...

  6. Vue源码解析,keep-alive是如何实现缓存的?

    前言 在性能优化上,最常见的手段就是缓存.对需要经常访问的资源进行缓存,减少请求或者是初始化的过程,从而降低时间或内存的消耗.Vue 为我们提供了缓存组件 keep-alive,它可用于路由级别或组件 ...

  7. vue之provide和inject跨组件传递属性值失败(父组件向子组件传值的两种方式)

    简单介绍:当一个子组件需要用到父组件的父组件的某些参数.那么这个时候为了避免组件重复传参,使用vue的依赖注入是个不错的方法,直接在最外层组件设置一个provide,内部不管多少嵌套都可以直接取到最外 ...

  8. Vue.js随笔三(npm init webpack my-project指令安装失败解决方案)

    如果没有安装淘宝给的镜像就先安装一下,指令如下,对!就是如此简单: npm install -g cnpm -registry=https://registry.npm.taobao.org 首先输入 ...

  9. Vue打包文件放在服务器后,浏览器存在缓存问题

    每次打包更新版本发到服务器上,导致偶尔会出现不能即使更新最新代码,浏览器存在缓存的问题. 解决方法:找到webpack .prod.conf.js 1.定义版本变量: const  Version = ...

随机推荐

  1. 【软件安装】CentOS7_直播服务搭建_nginx_nginx-http-flv-module

    1.介绍 nginx-http-flv-module是在nginx-rtmp-module基础上开发的一个直播模块. 感谢Arut创造了nginx-rtmp-module,它是Nginx的一个优秀的第 ...

  2. 7.CSMA协议

    载波监听多路访问协议CSMA CS:载波侦听/监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据. MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上 协议思想:发送帧 ...

  3. 在 Docker 搭建 Maven 私有库

    在 Docker 搭建 Maven 私有库 小引 If you are developing software without a repository manager you are likely ...

  4. xctf-web supersqli

    单引号注入,用order by查到了两个column.用union select的时候发现select关键字被过滤了 用分号尝试堆叠注入显示出了两张表 分别查询字段 flag在表19198109311 ...

  5. 跟老刘学运维day02~部署虚拟环境安装Linux系统(1)

    第1章 部署虚拟环境安装Linux系统 所谓“工欲善其事,必先利其器” 1.准备工具 VmwareWorkStation  15.5——虚拟机软件(必需) RedHatEnterpriseLinux ...

  6. Python列表函数和方法

    Python列表函数和方法: 函数: len(列表名): 返回列表长度 # len(列表名): # 返回列表长度 lst = [1,2,3,'a','b','c'] print("lst 列 ...

  7. 使用AOP获取自定义注解的内容

    目录结构: 一:自定义注解 package org.example.annotation; import java.lang.annotation.ElementType; import java.l ...

  8. PHP unixtojd() 函数

    ------------恢复内容开始------------ 实例 把 Unix 时间戳转换为儒略日计数: <?phpecho unixtojd();?> 运行实例 » 定义和用法 uni ...

  9. linux之SAMBA共享目录服务端架设

    samba 共享目录 1.SAMBA服务概述 协议 监听端口137 架构   samba:Linux系统的一种文件共享程序服务 通常在主机文件共享的应用场景中,由于文件系统的差异化,Windows和L ...

  10. C 语言学习 --2

    memset Declaration: void *memset(void *str, int c, size_t n); Copies the character c (an unsigned ch ...