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

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安装一下再重启项目就可以了。


http://www.kler.cn/news/323015.html

相关文章:

  • 【深度学习】深度学习框架有哪些及其优劣势介绍
  • 【CSS】透明度 、过渡 、动画 、渐变
  • JAVAEE如何实现网页(jsp)间的数据传输?一文总结
  • 2024 icpc 第二场网络赛题解
  • vue-cli,element-plus,axios,proxy
  • 31 变量的访问方式(直接和间接),内存地址(32 位和 64 位),指针的概念与定义,取址与取值运算符( 与 *)
  • Spark Streaming 容错机制详解
  • 【Docker】如何让docker容器正常使用nvidia显卡
  • 处理execl表格的库----openpyxl
  • C++ 文件I/O流
  • 【SpringBoot详细教程】-03-整合Junit【持续更新】
  • 代码随想录Day 57|prim算法和kruskal算法精讲,题目:寻宝
  • 提升效率的秘密武器选择指南
  • PTH原理 补丁+工具
  • Java项目——苍穹外卖总结
  • Linux usb hub阅读
  • 【学习】电脑上有多个GPU,命令行指定GPU进行训练。
  • C语言习题~day33
  • 【Unity保龄球项目】的实现逻辑以及代码解释
  • Python Daphne库:ASGI服务的高效Web服务器
  • 使用FFmpeg压缩MP3格式音频
  • 利用模糊综合评价法进行数值评分计算——代码实现
  • 基于Java开发的(控制台)模拟的多用户多级目录的文件系统
  • Redis的主要特点及运用场景
  • 【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)
  • 数据结构:特殊矩阵 及其存储
  • 策略路由控制选路
  • apt update时出现证书相关问题,可以关闭apt验证
  • 【Redis 源码】3dict字典数据结构
  • 打点 - 泛微 E-Cology WorkflowServiceXml