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

Vue 使用 vue-router 时,多级嵌套路由缓存问题处理

Vue 使用 vue-router 时,多级嵌套路由缓存问题处理

对于三级菜单(或多级嵌套路由),vue 都是 通过 keep-alive 组件来实现路由组件的缓存。

有时候三级或者多级路由时,会出现失效情况。以下是三级菜单缓存的例子。

最后会有惊喜!

1.配置嵌套路由

在 vue-router 中,嵌套路由需要正确配置 children 属性,并且每个路由组件都需要有唯一的 name,很重要。很重要。很重要。。

const routes = [{path: '/',component: Layout, // 布局组件children: [{path: '/menu1/path/',component: Menu1, // 一级菜单children: [{path: '/submenu1/path',component: SubMenu1, // 二级菜单children: [{path: 'item1',component: Item1, // 三级菜单name: 'Item1', // 确保每个组件有唯一的 namemeta: {noCache: false,   //自定义参数,是否缓存}},{path: 'item2',component: Item2,name: 'Item2',meta: {noCache: false,}},],},],},],},
];

2. 在嵌套路由中使用 router-view

在每一级菜单的组件中,都需要使用 router-view 来渲染子路由,记住是每一级

Menu1.vue

<template><div><h2>Menu 1</h2><keep-alive><router-view></router-view> <!-- 渲染二级菜单 --></keep-alive></div>
</template>

SubMenu1

<template><div><h3>SubMenu 1</h3><keep-alive><router-view></router-view> <!-- 渲染三级菜单 --></keep-alive></div>
</template>

3. 使用 keep-alive 缓存嵌套路由

在顶级组件(如 Layout.vue)中,用 包裹 ,确保所有嵌套路由组件都能被缓存。
如果只想缓存特定的嵌套路由组件,可以通过 includeexclude 属性来实现。

Layout.vue

<template><div><nav><!-- 菜单导航 --><router-link to="/menu1/submenu1/item1">Item 1</router-link><router-link to="/menu1/submenu1/item2">Item 2</router-link></nav><!-- 使用 keep-alive 缓存所有嵌套路由 --><keep-alive :include="cachedViews"  :exclude="notCacheName"><router-view></router-view></keep-alive></div>
</template><script>
export default {name: "clientManager",computed: {cachedViews() {return [...this.$store.state.tagsView.cachedViews];},key() {return this.$route.path;},notCacheName() {return [this.$route.meta && this.$route.meta.noCache ? this.$route.name : "",];},},
};
</script>

此处有疑问点:

我查到的文档,基本上都是说在 顶级组件 Layout.vue 里面配置 keep-alive即可,下级的不用配置。

但是经过我测试,发现每一级都要配置 keep-alive,请看第二步。不配置的话,缓存就是不起作用。不知道为啥?

我是配置了每一级的,然后就可以了。此次请大家帮我解一下疑惑,万分感谢!

4. 最后的页面

<template><div><h4>Item 1</h4><p>This is Item 1.</p></div>
</template><script>
export default {name: 'Item1',activated() {console.log('Item1 被激活');},deactivated() {console.log('Item1 被停用');},
};
</script>

菜单缓存失败的原因

  • 路由配置不正确,导致组件被重复渲染。
  • 组件没有唯一的 name。
  • 嵌套路由的 没有正确渲染
  • 确认页面的 name 是否和 路由配置定义页面的 name 是否相同,不同肯定失败

最易出错的是最后一点,请仔细检查。

相关文章:

Vue 使用 vue-router 时,多级嵌套路由缓存问题处理

Vue 使用 vue-router 时&#xff0c;多级嵌套路由缓存问题处理 对于三级菜单&#xff08;或多级嵌套路由&#xff09;&#xff0c;vue 都是 通过 keep-alive 组件来实现路由组件的缓存。 有时候三级或者多级路由时&#xff0c;会出现失效情况。以下是三级菜单缓存的例子。 最…...

ResNet 改进:轻量级的混合本地信道注意机制MLCA

目录 1. MLCA注意力机制 2. 改进位置 3. 完整代码 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. MLCA注意力机制 MLCA(Mixed Local Channel Attention)是一种轻量级的混合本地信道注意机制,旨在提升卷积神经网络(CNN)在图像处理…...

【第22节】C++设计模式(行为模式)-Iterator(迭代器)模式

一、问题背景 Iterator 模式是设计模式中最为常见和实用的模式之一。它的核心思想是将对聚合对象的遍历操作封装到一个独立的类中&#xff0c;从而避免暴露聚合对象的内部表示。通过 Iterator 模式&#xff0c;我们可以实现对聚合对象的统一遍历接口&#xff0c;而不需要关心聚…...

FreeRTOS第15篇:FreeRTOS链表实现细节03_List_t与ListItem_t的奥秘

文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 FreeRTOS列表的核心数据结构 FreeRTOS的列表实现由两个关键结构体组成:List_t(列表)和ListItem_t(列表项)。它们共同…...

【Node.js入门笔记1---初始Node.js)】

Node.js入门笔记1 初始Node.js1.Node.js简介2.Node.js中js的运行环境3.Node.js 可以做什么4.Node.js 怎么学 初始Node.js 1.Node.js简介 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境&#xff0c;用于在服务器端运行 JavaScript 代码。它让开发者可以用 Java…...

PyTorch基础语法万字解析

第一章&#xff1a;张量基础&#xff08;Tensor Fundamentals&#xff09; 1.1 张量创建 在PyTorch中&#xff0c;张量&#xff08;Tensor&#xff09;是用于表示数据的基本单元。它类似于NumPy中的数组&#xff0c;但额外支持GPU加速和自动微分功能。以下是几种创建张量的方…...

eclipse查看源码

查看 Collection 源码的步骤 打开 Eclipse。 在代码中定位到 Collection 接口&#xff1a; 例如&#xff0c;在代码中输入 Collection&#xff0c;然后按住 Ctrl 键并单击 Collection。 或者直接在代码中使用 Collection 的地方按 F3 键。 如果源码已关联&#xff1a; Ecl…...

robot:生而为奴

英文单词 robot&#xff0c;含义是”机器人“。 robot n.机器人 但其实&#xff0c;robot 这个单词的字面义&#xff0c;是生而为奴&#xff1a; robot rob打劫、搜刮 ot &#xff08;天生&#xff09;被剥削者 生而为奴 单词 bot&#xff0c;也指机器人&#xff0c;它是…...

计算机网络篇:基础知识总结与基于长期主义的内容更新

基础知识总结 和 MySQL 类似&#xff0c;我同样花了一周左右的时间根据 csview 对计算机网络部分的八股文进行了整理&#xff0c;主要的内容包括&#xff1a;概述、TCP 与 UDP、IP、HTTP&#xff0c;其中我个人认为最重要的是 TCP 这部分的内容。 在此做一篇目录索引&#xf…...

操作系统 2.3-用户级线程

多进程的回顾 多进程概念&#xff1a; 操作系统能够同时管理多个进程&#xff08;PID:1, PID:2, PID:3&#xff09;&#xff0c;每个进程可以独立执行一系列指令。 进程结构&#xff1a; 每个进程拥有自己的代码段、数据段、堆和栈。 进程控制块&#xff08;PCB&#xff09;…...

解决火绒启动时,报安全服务异常,无法保障计算机安全

1.找到控制面板-安全和维护-更改用户账户控制设置 重启启动电脑解决。...

2025-03-07 :详细介绍一下 Databricks 的 Lakehouse

Databricks 的 Lakehouse 是一种结合了数据湖和数据仓库优势的现代数据架构。它旨在解决传统数据湖和数据仓库的局限性&#xff0c;提供高效、灵活且可扩展的数据管理解决方案。以下是关于 Databricks Lakehouse 的详细介绍&#xff1a; 1. Lakehouse 的概念 Lakehouse 是一种…...

小程序事件系统 —— 32 事件系统 - 事件分类以及阻止事件冒泡

在微信小程序中&#xff0c;事件分为 冒泡事件 和 非冒泡事件 &#xff1a; 冒泡事件&#xff1a;当一个组件的事件被触发后&#xff0c;该事件会向父节点传递&#xff1b;&#xff08;如果父节点中也绑定了一个事件&#xff0c;父节点事件也会被触发&#xff0c;也就是说子组…...

STM32点亮LED灯

1.1 介绍&#xff1a; LED模块。它的控制方法非常简单&#xff0c;要想点亮LED&#xff0c;只要让它两端有一定的电压就可以&#xff1b;实验中&#xff0c;我们通过编程控制信号端S的高低电平&#xff0c;从而控制LED的亮灭。我们提供一个测试代码控制LED模块上实现闪烁的效果…...

C++ primer plus 第七节 函数探幽完结版

系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 C primer plus 第五节 循环-CSDN博客 C primier plus 第七节 函数探幽第一部分-CSDN博客 …...

共聚焦显微镜的使用操作流程

一、使用前准备&#xff1a; 在使用显微镜进行细胞制片观察之前&#xff0c;一系列细致的准备工作是必不可少的。首先&#xff0c;将废液缸从框架内取出&#xff0c;清空并清洗&#xff0c;确保无残留液体干扰后续实验。接着&#xff0c;倒取适量的PBS&#xff08;磷酸盐缓冲液…...

打破界限!家电行业3D数字化营销,线上线下无缝对接

家电行业正步入从增量市场向存量市场的转型期&#xff0c;消费者的观念日益成熟&#xff0c;对产品体验和服务质量的要求愈发严格。无论是线上电商平台还是线下实体店铺&#xff0c;提供个性化、增强体验感的产品与服务已成为家电市场未来发展的核心动力。51建模网凭借“3D数字…...

13 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar组件进阶指南(四)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 补充内容第四篇&#xff1a;打造高性能Avatar组件的终极优化秘籍1. 性能优化策略1.1 状态管理优化1.2 渲染性能优化 2. 资源优化2.1 图片…...

[Vue warn]: Duplicate keys detected: ‘xxx‘. This may cause an update error.

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…...

设计模式 - 工厂模式 精准梳理精准记忆

1、代码片段 - 带入理解 一、核心模式分类 简单工厂模式&#xff08;编程习惯&#xff0c;非 GoF 设计模式&#xff09;工厂方法模式&#xff08;GoF 创建型模式&#xff09;抽象工厂模式&#xff08;GoF 创建型模式&#xff09; 二、演变过程&#xff1a;咖啡店案例 初始实现…...

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量&#xff08;个&#xff09;&#xff1a;决定了 GPU 并行处理能力&#xff0c;在 AI 等并行计算类业务下&#xff0c;CUDA 核心越多性能越好。 显存容量&#xff08;GB&#xff09;&#xff1a;决定了 GPU 加载数据量的大小&#xff0c;在 AI…...

springboot项目使用中创InforSuiteAS替换tomcat

springboot项目使用中创InforSuiteAS替换tomcat 学习地址一、部署InforSuiteAS1、部署2、运行 二、springboot项目打包成war包 特殊处理1、pom文件处理1、排除内嵌的tomcat包2、新增tomcat、javax.servlet-api3、打包格式设置为war4、打包后的项目名称5、启动类修改1、原来的不…...

八、Redis 过期策略与淘汰机制:深入解析与优化实践

Redis 过期策略与淘汰机制:深入解析与优化实践 Redis 作为基于内存的高性能数据库,如何管理过期的键(key)和当内存不足时如何淘汰数据,是影响 Redis 性能和稳定性的关键因素。本篇文章将深入解析 Redis 的过期 key 处理方式和数据淘汰策略,并结合实际应用场景,帮助开发…...

Tomcat-web服务器介绍以及安装部署

一、Tomcat简介 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用…...

C#释放内存空间的方法

目录 前言释放 C# 对象内存的六种方法1、手动释放内存空间2、使用 Using 语句3、使用 垃圾回收器4、GC.Collect() 方法5、GC.WaitForPendingFinalizers() 方法6、WeakReference 类 注意 前言 当不再需要对象时释放内存空间对于防止内存泄漏和提高应用程序性能至关重要。C# 提供…...

18类创新平台培育入库!长沙经开区2025年各类科技创新平台培育申报流程时间材料及申报条件

长沙经开区打算申报企业研发中心、技术创新中心、工程技术研究中心、新型研发机构、重点实验室、概念验证中心和中试平台、工程研究中心、企业技术中心、制造业创新中心、工业设计中心等创新平台的可先备案培育入库&#xff0c;2025年各类平台的认定将从培育库中优先推荐&#…...

使用 Elasticsearch 进行集成测试初始化​​数据时的注意事项

作者&#xff1a;来自 Elastic piotrprz 在创建应该使用 Elasticsearch 进行搜索、数据聚合或 BM25/vector/search 的软件时&#xff0c;创建至少少量的集成测试至关重要。虽然 “模拟索引” 看起来很诱人&#xff0c;因为测试甚至可以在几分之一秒内运行&#xff0c;但它们实际…...

PostgreSQL常用系统表

1.概念 * 系统表记录了数据库的各种信息&#xff0c;并由SQL命令关联的系统操作表操作会自动维护其中的内容。 * pg_catalog是postgres的系统表命名空间&#xff0c;用于存储系统函数和系统元数据&#xff0c;包含了所有的内置数据类型、函数、表、系统视图等。pg_catalog并不…...

9. Flink的性能优化

1. Flink的资源和代码优化 1.1 slot资源配置 Flink中具体跑任务的进程叫TaskManager&#xff0c;TM进程又会根据配置划分出诺干个TaskSlot&#xff0c;它是具体运行SubTask的地方。slot是Flink用来隔离各个subtask的资源集合&#xff0c;这里的资源一把指内存&#xff0c;TCP…...

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…...