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

Vue 可配置化的路由缓存(Vu2 Vue3)

Vue 可配置化的路由缓存(Vu2 & Vue3)

1 介绍

在Vue的项目当中,路由缓存是一个比较常见的功能,譬如,从列表页面进入到详情页面,返回到列表页面时,如果可以保持列表的状态,那用户效果就会好很多。

Vue当中的路由缓存是通过内置组件 keepAlive 实现的,在项目规模比较小,代码量不多的时候,我们还可以通过手动去操作数据来进行路由缓存,但是一旦项目的规模变大,代码量和组件数量增多,如果没有一个方便的方式去配置和自动进行路由缓存,那路由缓存的功能就会变得很麻烦,并且容易出Bug。

这里提供了一份可配置化的路由缓存,只需要在配置路由的时候进行缓存的配置,后续就不需要再进行任何操作了。

注意:仓库当中存在了两个项目,分别为Vue2和Vue3,可以根据自身需要进行查看。

2 相关技术栈

2.1 Vue2

  • Vue2
  • Vuex
  • VueRouter
  • ElementUI

2.2 Vue3

  • Vue3
  • Pinia
  • VueRouter
  • ElementPlus

3 思路解析

这里大概解析一下整个路由缓存的思路:
关键文件有以下几个:

  • src/components/PageView.vue
  • src/router/index.js
  • src/utils/vueKeepAliveUtil.js
  • src/main.js

首先我们需要创建一个storestore当中存放了cachedViews,即需要缓存的路由的名称,后续我们需要在路由拦截器当中对cachedViews进行添加和删除的操作

随后我们需要创建一个PageView组件,PageView当中就是读取store中的数据,并且使用keepAlive组件,进行路由缓存,准备功能已经完成了,后续我们只需要进行操作cachedViews,就可以实现路由的缓存了

<template><div id="page-view"><keep-alive :include="cachedViews"><router-view></router-view></keep-alive></div>
</template><script>
export default {name: "PageView",computed: {cachedViews(){return this.$store.state.cachedViews;}},
}
</script>

准备工作完成之后,我们需要去配置路由,详细的配置可以参考项目中的路由配置,meta中的titlehiddencacheFromactiveMenu都有相关的注释信息,用于实现菜单组件、菜单高亮、路由缓存

最重要的是vueKeepAliveUtil,此文件当中,进行了路由的拦截,并且根据路由信息中的meta信息,来决定是否对路由进行缓存,详细代码如下,可以结合代码中的注释进行理解

import router from "@/router";
import store from "@/store";router.beforeEach((to, from, next) => {// 如果to需要进行缓存,则直接进行缓存,无论是从哪里进入,都先进行缓存if (to.meta && to.meta.keepAlive) {store.commit("ADD_CACHEVIEW", to);}// 如果to的cacheFrom存在,并且cacheFrom不包含from的name,说明是从不需要缓存to的页面进入to的,这个时候就删除to的缓存// 从其他菜单项,进入keepAlive的页面,需要删除进入页面的缓存if (to.meta.cacheFrom && !to.meta.cacheFrom.includes(from.name)) {store.commit("DELETE_CACHEVIEW", to);}// 如果从需要缓存的页面,跳转到其他页面,则先缓存From// 例如:从list跳转detail,缓存listif (from.meta && from.meta.keepAlive) {store.commit("ADD_CACHEVIEW", from);}// 放行路由setTimeout(() => next());
});

最后需要在main.js当中去引入vueKeepAliveUtil.js,使其生效

4 详细代码

具体代码,请访问GitHub仓库
GitHub仓库地址: https://github.com/Jin0811/KeepAlive

相关文章:

Vue 可配置化的路由缓存(Vu2 Vue3)

Vue 可配置化的路由缓存&#xff08;Vu2 & Vue3&#xff09; 1 介绍 在Vue的项目当中&#xff0c;路由缓存是一个比较常见的功能&#xff0c;譬如&#xff0c;从列表页面进入到详情页面&#xff0c;返回到列表页面时&#xff0c;如果可以保持列表的状态&#xff0c;那用户…...

Linux VPU驱动

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 概述 VPU 是用来进行图像、视频数据进行硬件编、解码的硬件模块。内部集成了 Encoder、Decoder 功能部件进行图像、视频数据进行硬件编、解码&a…...

spring 笔记

一、spring概述 1.1 spring介绍 spring是一个轻量级的控制反转和面向切面的容器框架&#xff0c;用来解决企业项目开发的复杂度问题---解耦 轻量级&#xff1a;体积小&#xff0c;对代码没有侵入性控制反转&#xff1a;IOC inverse of control&#xff0c; 把创建对象的工作交…...

Java日志框架学习

首先&#xff0c;Java日志框架可以分为两类&#xff1a;门面型日志框架和记录型日志框架。 门面型日志框架 JCL&#xff1a;Java日志接口&#xff0c;后更名为Commons LoggingSLF4J&#xff1a;是一套简易Java日志门面&#xff0c;本身并无日志的实现 记录型日志框架 JUL&a…...

基础面试题:堆和栈的区别

面试题&#xff1a;堆和栈的区别&#xff08;往往讲的是内存zha&#xff09; 为什么说访问栈栈比访问堆快些&#xff1f; 目录 一、数据结构中的堆栈 1、数据结构中的堆 1&#xff09;堆的定义 2&#xff09;堆的效率 2、 数据结构中的栈 二、内存中的堆栈 1、内存堆的定义…...

(干货教程)在VSCode并使用chatgtp插件编写CC++语言程序

&#xff08;干货教程&#xff09;在VSCode并使用chatgtp插件编写CC语言程序 下载并安装VSCODE 第1步&#xff0c;下载VSCODE https://code.visualstudio.com/Download 第2步&#xff0c;安装VSCODE 安装过程较简单&#xff0c;这里省略。 安装好后效果如图&#xff1a…...

【思维模型】概率思维的价值:找到你的人生算法,实现阶级跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…...

SpringBoot + kotlin/java + Mybatis-Plus +Sqlite + Gradle多模块项目

前言 我自己的业务项目&#xff0c;先用kotlinspringboot 搭建&#xff0c; 发现gradle支持kts脚本&#xff0c;于是我就搭建试试。我就选用了最流行的Sqlite内嵌数据库,虽然H2也不错&#xff0c;但是Sqlite才是最流行的。orm框架我还是选择了Mybatis-Plus &#xff0c;为此中…...

Docker 容器与容器云读书笔记(一)

最近都没时间看书&#xff0c;闲暇之余看看书&#xff0c;写写笔记&#xff0c;记录一下这难得的时光。 docker容器的出现 2013年初&#xff0c; 一个名字从云计算领域横空出世&#xff0c;并在整个IT行业激起千层浪&#xff0c;这就是Docker。Docker选择容器作为核心和基础&…...

软件设计(九)

软件设计&#xff08;八&#xff09;https://blog.csdn.net/ke1ying/article/details/128954569?spm1001.2014.3001.5501 81、模块A将学生信息&#xff0c;即学生姓名、学号、手机等放到一个结构体系中&#xff0c;传递给模块B&#xff0c;模块A和B之间的耦合类型为 什么耦合…...

FoveaBox原理与代码解析

paper&#xff1a;FoveaBox: Beyond Anchor-based Object Detectorcode&#xff1a;https://github.com/taokong/FoveaBox背景基于anchor的检测模型需要仔细设计anchor&#xff0c;常用方法之一是根据特定数据集的统计结果确定anchor的number、scale、ratio等&#xff0c;但这种…...

Linux内核启动(1,0.11版本)启动BIOS与加载内核

从电源到启动BIOS 从我们按下启动电源到BIOS&#xff0c;按下电源–>主板会向电源组发出信号–> 接受到信号后&#xff0c;当主板收到电源正常启动信号后&#xff0c;主板会启动CPU(CPU重置所有寄存器数据&#xff0c;并且初始化数据)&#xff0c;比如32位系统&#xff…...

python制作贪吃蛇小游戏,畅玩无限制

前言 大家早好、午好、晚好吖 ❤ ~ 现在这年头&#xff0c;无论玩个什么游戏都有健康机制&#xff0c; 这让我们愉悦玩游戏得步伐变得承重起来&#xff0c; 于是无聊之下我写了个贪吃蛇小游戏&#xff0c;来玩个快乐 代码展示 导入模块 import random import sys import …...

MySQL-InnoDB数据页结构浅析

在MySQL-InnoDB行格式浅析中&#xff0c;们简单提了一下 页 的概念&#xff0c;它是 InnoDB 管理存储空间的基本单位&#xff0c;一个页的大小一般是 16KB 。 InnoDB 为了不同的目的而设计了许多种不同类型的 页&#xff1a; 存放表空间头部信息的页存放 Insert Buffer信息的…...

Java、JSP职工人事管理系统设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;现在随着我们这个社会的计算机技术的快速发展&#xff0c;计算机在企业管理中得到普遍的应用&#xff0c;现在我们利用计算机在实现企业职工的管理越来越重要。当今社会是快速发展的信息社会&#xff0c;自动化信息的作用也变得越来…...

数据结构与算法这么难,为什么我们还要学习?

文章目录前言1. 数据结构与算法是什么&#xff1f;2. 为什么数据结构与算法很难&#xff1f;3. 如何系统学习数据结构与算法&#xff1f;&#x1f351; 复杂度&#x1f351; 线性表&#x1f351; 树形结构&#x1f351; 图&#x1f351; 排序&#x1f351; 字符串&#x1f351;…...

剑指 Offer 52. 两个链表的第一个公共节点

摘要 剑指 Offer 52. 两个链表的第一个公共节点 一、双指针解法 使用双指针的方法&#xff0c;可以将空间复杂度降至 O(1)。只有当链表 headA headB都不为空时&#xff0c;两个链表才可能相交。因此首先判断链表 headA和 headB是否为空&#xff0c;如果其中至少有一个链表为…...

可以写进简历的软件测试电商项目,不进来get一下?

前言 说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff…...

蓝桥杯-算法-印章问题

这个题真的顶啊&#xff01;思路&#xff1a;n种图案&#xff0c;m张印章&#xff0c;每一个图案的概率是1/n&#xff0c;这个概率以后用P表示首先我们定义dp[i][j]是买了i张印章&#xff08;对应于上面的m&#xff09;&#xff0c;凑齐j种图案的概率&#xff08;对应于上面的n…...

戴尔游匣G16电脑U盘安装系统操作教程分享

戴尔游匣G16电脑U盘安装系统操作教程分享。有用户在使用戴尔游匣G16电脑的时候遇到了系统问题&#xff0c;比如电脑蓝屏、自动关机重启、驱动不兼容等问题。遇到这些问题如果无法进行彻底解决&#xff0c;我们可以通过U盘重新安装系统的方法来解决&#xff0c;因为这些问题一般…...

2023数学建模美赛赛题思路分析 2023美赛 美国大学生数学建模数模

将在本帖更新2023美国大学生数学建模数模美赛各个赛题思路&#xff0c;大家可以点赞收藏&#xff01; 一、参赛报名 组队参赛&#xff08;每队人数3人&#xff0c;专业不限&#xff09;。 二、赛题思路及资料 会在本帖更新思路分析&#xff0c;Q群可领取模型代码/赛题思路资料…...

vue3与vue2的对比

Vue 3.0 和 Vue 2.0 是 Vue 前端框架的两个主要版本&#xff0c;它们有着不同的更新和优化&#xff1a; Vue 3.0 主要更新内容&#xff1a; 采用 TypeScript 作为开发语言&#xff0c;提高了代码的类型安全性。 速度更快&#xff0c;内存使用更少&#xff0c;支持大规模数据处…...

史上最全软件测试工程师常见的面试题总结(百度、oppo、中软国际、华为)备战金三银四

1、面试&#xff1a;神州数码1.介绍你下你项目中一个自动化实现的流程2.你觉得做自动化的意义在哪里 >需要对之前已经实现的功能进行回归测试、保证当前版本更新的内容不能影响到之前已经实现好的功能3.你们做自动化产生了什么结果 >测试报告、报错截图和报错日志、测试报…...

“深度学习”学习日记。卷积神经网络--用CNN的实现MINIST识别任务

2023.2.11 通过已经实现的卷积层和池化层&#xff0c;搭建CNN去实现MNIST数据集的识别任务&#xff1b; 一&#xff0c;简单CNN的网络构成&#xff1a; 代码需要在有网络的情况下运行&#xff0c;因为会下载MINIST数据集&#xff0c;运行后会生成params.pkl保留训练权重&…...

JavaWeb--JDBC练习

JDBC练习5.1 需求5.2 案例实现5.2.1 环境准备5.2.2 查询所有5.2.3 添加数据5.2.4 修改数据5.2.5 删除数据5.1 需求 完成商品品牌数据的增删改查操作 查询&#xff1a;查询所有数据添加&#xff1a;添加品牌修改&#xff1a;根据id修改删除&#xff1a;根据id删除 5.2 案例实…...

【LeetCode】2335. 装满杯子需要的最短总时长

2335. 装满杯子需要的最短总时长 题目描述 现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 a…...

Android 12.0 通过驱动实现禁用usb鼠标和usb键盘功能

1.1概述 在12.0的系统产品定制化开发中,在进行定制中有关于usb键盘和usb鼠标的需求中,产品要求禁止usb口挂载usb鼠标和usb键盘,所以需要要求在usb挂载类型的时候 判断如果是usb鼠标和usb键盘就不让挂载,这就需要从驱动方面入手来解决这个问题,接下来看下驱动的某些挂载usb…...

C++入门——内存管理

C入门——内存管理 C/C内存分布 分类是为了更好的管理 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (…...

MySQL-InnoDB行格式浅析

简介 我们知道读写磁盘的速度非常慢&#xff0c;和内存读写差了几个数量级&#xff0c;所以当我们想从表中获取某些记录时&#xff0c; InnoDB 存储引擎需要一条一条的把记录从磁盘上读出来么&#xff1f; 不&#xff0c;那样会慢死&#xff0c;InnoDB 采取的方式是&#xff1a…...

AXI 总线协议学习笔记(4)

引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范。 AXI 总线协议学习笔记&#xff08;2&#xff09; AXI 总线协议学习笔记&#xff08;3&#xff09; 从本篇开始&#xff0c;详细翻译并学习AXI协议的官方发布规范。 文档中的时序图说明&#xff1a; AXI指&#xff1…...

手机微信官方网站/宁波网站制作优化服务公司

U-Boot的命令为用户提供了交互功能&#xff0c;并且已经实现了几十个常用的命令。如果开发板需要很特殊的操作&#xff0c;可以添加新的U-Boot命令。U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在<include/command.h>头文件中定义 #define U_BOOT_CMD(name,ma…...

平顶山市哪里有做网站的/优化关键词推广

阅读本文大概需要3分钟。 好吧&#xff0c;我承认我标题党了&#xff0c;如果你是进来找如何搭建小程序中的支付流程的&#xff0c;请你下车吧~ 这篇文章是介绍个人小程序如何集成赞赏功能的&#xff0c;利用微信小程序提供的支付接口必须具有公司资质才可以。或者你也可以集成…...

网站建设的辅助软件/网络推广员好做吗

继承特点 。继承是面向对象的三个特征&#xff08;封装、继承、多态&#xff09;之一&#xff0c;也是软件复用的重要手段 继承的特点 。Java继承具有单继承的特点 。。每个子类只有一个直接父类 。。子类扩展&#xff08;extends&#xff09;父类、父类派生&#xff08;derive…...

绍兴疫情最新消息今天封城/seo最强

我真的贪恋这时光。。。 没将这美好用上。 都说该找到个感兴趣&#xff0c;天天快乐的工作。可是多么的难找&#xff0c;真的找到了80%符合想象的&#xff0c;是不是要从1-2千块干起呢&#xff1f; 路漫漫&#xff0c;总感觉冥冥中有条路是给聪明人或是执着人留着的捷径&#x…...

南京越城建设集团有限公司网站/市场调研报告word模板

Mysql自动化任务&#xff0c;有两种&#xff1a;基于事件&#xff0c;基于时间。 基于事件&#xff0c;可由触发器来实现。具体触发器的编写比较简单&#xff0c;其语法规范可参照&#xff1a;http://www.jb51.net/article/59552.htm。 基于时间&#xff0c;可由定时任务来实现…...

外贸建站推广/百度广告竞价排名

Write a function to find the longest common prefix string amongst an array of strings. 方法1:BF, 首先计算两个字符串的prefix&#xff0c;每次用这个prefix与下一个字符串生成新的prefix 效果较差&#xff0c;大数据集直接挂了&#xff0c;代码可读性太差-_-! 1 public …...