当前位置: 首页 > news >正文

vue3中< keep-alive >页面实现缓存及遇到的问题

vue3中< keep-alive >页面实现缓存及遇到的问题

实现原理:keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。实现不同路由是否缓存只需要设置对应路由参数keepAlive为true,不需要缓存的路由设置false。如果是多级路由你要设置子路由缓存的话,它的父级路由的keepAlive也必须为true。

keep-alive的参数
参数原理
include它会根据组件的 name 选项进行匹配,所以组件如果想要条件性地被 KeepAlive 缓存,就必须显式声明一个 name 选项
exclude任何名称与 exclude 匹配的组件都不会被缓存
max最大缓存实例数
<!-- 以英文逗号分隔的字符串 -->
<KeepAlive include="a,b"><component :is="view" />
</KeepAlive><!-- 正则表达式 (需使用 `v-bind`) -->
<KeepAlive :include="/a|b/"><component :is="view" />
</KeepAlive><!-- 数组 (需使用 `v-bind`) -->
<KeepAlive :include="['a', 'b']"><component :is="view" />
</KeepAlive>
一:keep-alive设置缓存
<template><div id="app"><!--需要缓存的keep-alive配置 展示内容--><keep-alive :include="getKeepAliveNames"><router-view v-if="$route.meta.keepAlive" /></keep-alive><!--不需要缓存的keep-alive 配置 展示内容--><router-view v-if="!$route.meta.keepAlive" /></div>
</template>
二:router,多级router页面缓存
  //首页{path: "/home",name: "home",component: component: () => import("@/views/home/index.vue")//配置keep-alive 的状态  meta: {keepAlive: true, //需要缓存的页面,title:"首页"},},{path: "/user",name: "user",component:  component: () => import("@/views/user/index.vue"),//配置keep-alive 的状态  meta: {keepAlive: true, //需要缓存的页面title:"用户"},children:[{path: "/userOne",name: "userOne",component:  component: () => import("@/views/userOne/index.vue"),//配置keep-alive 的状态  meta: {keepAlive: true, //需要缓存的页面,title:"用户1"},},{path: "/userTwo",name: "userTwo",component:  component: () => import("@/views/userTwo/index.vue"),//配置keep-alive 的状态  meta: {keepAlive: true, //需要缓存的页面,title:"用户2"},},]},
三:查看页面是否缓存成功
1:查看 onActivated ,onDeactivated 判断 keepalive是否生效
<script setup>
import { onActivated, onDeactivated } from 'vue'onActivated(() => {// 调用时机为首次挂载// 以及每次从缓存中被重新插入时
})onDeactivated(() => {// 在从 DOM 上移除、进入缓存// 以及组件卸载时调用
})
</script>
2:使用vue插件判断缓存是否生效

在这里插入图片描述

四:遇到的问题

写了以上步骤缓存都失效,查看了原因:是因为keep-alive里面的名称和组件的名称没有匹配上。
解决办法是在组件页面给他命名,这样就解决了。

import { defineOptions} from 'vue';
defineOptions({ name: 'userRegister' })//与路由的name要一致

如果遇到defineOptions报错
更新vue和vue-router版本就行;我的版本是:"vue": "3.3.4","vue-router": "^4.0.12",然后再npm i安装一下再重启项目就可以了。

相关文章:

  • OpenAI o1与GPT-4o究竟强在哪里
  • 乱改计量单位引出的问题-《分析模式》漫谈35
  • k8s搭建一主三从的mysql8集群---无坑
  • 数字化那点事:一文读懂数字孪生
  • 详解 Spring Boot 的 RedisAutoConfiguration 配置
  • ide 使用技巧与插件推荐
  • web前端(本地存储问题超过5MB不继续保存解决办法)
  • Spring Cloud Alibaba-(6)Spring Cloud Gateway【网关】
  • 网络安全中的 EDR 是什么:概述和功能
  • Leetcode Hot 100 | 543.二叉树的直径 | 递归+优化
  • python.tkinter设计标记语言(渲染6-暂停与跳过渲染)
  • Arweave 出块流程详解
  • 【优选算法】(第十一篇)
  • 排水系统C++
  • 对象存储极简理解(对象、存储桶)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • angular学习第一篇-----环境搭建
  • Bootstrap JS插件Alert源码分析
  • CSS魔法堂:Absolute Positioning就这个样
  • css系列之关于字体的事
  • input的行数自动增减
  • JavaScript设计模式之工厂模式
  • Java的Interrupt与线程中断
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 多线程事务回滚
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序开发之路(一)
  • 中文输入法与React文本输入框的问题与解决方案
  • 《码出高效》学习笔记与书中错误记录
  • 回归生活:清理微信公众号
  • #《AI中文版》V3 第 1 章 概述
  • #FPGA(基础知识)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (6)设计一个TimeMap
  • (PySpark)RDD实验实战——求商品销量排行
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (第30天)二叉树阶段总结
  • (独孤九剑)--文件系统
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十五)、把自己的镜像推送到 DockerHub
  • (算法)前K大的和
  • (转) Face-Resources
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .net core控制台应用程序初识
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET Standard 的管理策略
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET中使用Redis (二)
  • 。。。。。