vue 页面缓存 keep-alive(含配置清除页面缓存 exclude,局部缓存,动态缓存,路由控制缓存 $route.meta.keepAlive)

简介: vue 页面缓存 keep-alive(含配置清除页面缓存 exclude,局部缓存,动态缓存,路由控制缓存 $route.meta.keepAlive)

添加页面缓存

src/App.vue

使用keep-alive组件包裹,则再次进入页面时,会使用缓存中的组件,不会重新渲染(不再执行mounted及之前的生命周期中的代码),用于保存组件的原始状态(所有变量的值保持最终状态不变)

<keep-alive>
    <router-view></router-view>
</keep-alive>

清除页面缓存

若部分页面希望每次打开时,都重新渲染(所有变量初始化为data中定义的值,并执行mounted及之前的生命周期中的代码),则需清除页面缓存

方式一:在 <keep-alive> 上添加 exclude属性

属性值为需清除缓存的页面的vue文件的name属性的值

比如针对 /test 路由对应的 test.vue组件清除缓存,则需

1. 给 test.vue 文件添加 name属性,值为“test” (可自定义为任意字符串)

    export default {
        name:'test',

2. 在 <keep-alive> 上添加 exclude属性

<keep-alive exclude="test" >
    <router-view></router-view>
</keep-alive>

若针对多个页面清除缓存,则使用 , 将name属性值隔开

<keep-alive exclude="test1,test2" >
    <router-view></router-view>
</keep-alive>

或使用正则表达式(注意需用:绑定exclude,正则表达式用“”包裹)

<keep-alive :exclude="/^test.*/" >
    <router-view></router-view>
</keep-alive>

方式二:通过路由传参实现  $route.meta.keepAlive

将 src/App.vue 中改为

<keep-alive >
    <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

在定义路由的文件中,设置 meta.keepAlive 参数,如在 src/routes.js 中

  • 定义路由——使用缓存的页面
    // 使用缓存的页面
    {
        path: '/SUI',
        meta: {
            keepAlive: true
        },
        name: 'SUI官网',
        component: resolve => require(['@/projects/SUIweb/index'], resolve)
    },
  • 定义路由——不使用缓存的页面
    // 不使用缓存的页面
    {
        path: '/dic',
        name: '速查手册',
        component: resolve => require(['@/projects/dic/index'], resolve)
    },

局部缓存

若同一页面中,有的组件使用缓存,有的组件不使用缓存,则使用keep-alive组件包裹需要使用缓存的组件即可

<!--列表组件使用缓存-->
<keep-alive >
    <List />
</keep-alive>
 
<!--详情组件不使用缓存-->
<Detail />

动态缓存

现需实现以下功能:

  • 从文章新增页面到文章列表页面——刷新文章列表
  • 从文章详情页面到文章列表页面——不刷新文章列表

即从不同页面进入相同页面,有时需使用缓存,有时不使用缓存,这时需使用到 beforeRouteLeave(to, from, next)

文章列表页的路由定义

{
  path: '/list',
  name: '文章列表',
  component: List.vue,
  meta: {
    keepAlive: true // 需要被缓存
  }
}

文章新增页面组件中,设置beforeRouteLeave

export default {
  beforeRouteLeave(to, from, next) {
    // 让文章列表不缓存,即刷新
    to.meta.keepAlive = false; 
    next();
  }
};

文章详情页面组件中,设置beforeRouteLeave

export default {
  beforeRouteLeave(to, from, next) {
    // 让 文章列表页面 缓存,即不刷新
    to.meta.keepAlive = true; 
    next();
  }
};


目录
相关文章
|
8天前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
30 5
|
7天前
|
缓存 JavaScript
vue使用keep-alive实现页面前进刷新,后退缓存,完美运行无bug
vue使用keep-alive实现页面前进刷新,后退缓存,完美运行无bug
72 1
消息中间件 缓存 监控
36 0
|
1月前
|
缓存 JavaScript
Vue学习之--------编程式路由导航、缓存路由组件、新的钩子函数(4)(2022/9/5)
这篇文章介绍了Vue中编程式路由导航的方法,包括使用`$router.push`、`$router.replace`、`$router.forward`、`$router.back`和`$router.go`进行路由跳转和历史记录操作,以及如何利用`<keep-alive>`组件缓存路由组件,和Vue Router新增的两个生命周期钩子`activated`和`deactivated`的用法及其在项目中的应用和测试结果。
Vue学习之--------编程式路由导航、缓存路由组件、新的钩子函数(4)(2022/9/5)
|
27天前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
|
28天前
|
存储 缓存 NoSQL
【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?
【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?
|
28天前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
|
30天前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
|
7天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
23天前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
50 0