vueRouter 配合 keep-alive 不生效的问题

news/2024/7/10 3:18:11 标签: vue, javascript, 前端

文章目录

    • 问题说明
    • 案例复现
      • demo 结构
      • 问题复现和解决

其实这个不生效的问题根本也不算一个问题,犯的错和写错单词差不多,但是也是一时上头没发现,所以记录一下,如果遇到同样的问题,也希望可以帮助你早点看到这个哭笑不得的错误,哈哈哈

问题说明

  1. 这里我写了一个非常简单的demo来复现我的问题,我的问题场景出自于一个后台管理系统,我在 app.vue 中使用了 router-view 标签,来展示 layout 和其他一级路由,然后在 layout 下的 main 区域使用了一个 router-view 来展示通过菜单栏切换的子路由
  2. 问题就出在这里了,我把 keep-alive 写在了 app.vue 下的 router-view 位置,然后子路由中需要缓存的组件,就无法实现缓存,当时让我还以为是什么bug,但是也没发现什么问题,最后看官网也是这样使用的,最后在思考一段时间后点开 router 文件,猛然惊醒,写错了位置

案例复现

demo 结构

  1. 首先看一下我写的简单 demo

    在这里插入图片描述

  2. 效果很简单,点击切换路由,切换的这个路由是子路由,路由结果如下:

    const routes = [
    	{
    		path: '/',
    		name: 'home',
    		component: () => import('@/components/HomeView.vue'),
    		children: [
    			{
    				path: 'about',
    				component: () => import('@/views/AboutView.vue')
    			},
    			{
    				path: 'message',
    				component: () => import('@/views/MessageView.vue')
    			}
    		]
    	}
    ]
    
  3. 这些我就不做赘述了,都非常简单

  4. app.vue 文件代码如下:

    <template>
    	<div>
    		<router-view></router-view>
    	</div>
    </template>
    
    <script>javascript">
    export default {}
    </script>
    
    <style scoped></style>
    
  5. 看了这个之后,在展示一下一级路由 HomeView,如下:

    <template>
    	<div class="home-container">
    		<div class="header">
    			<div class="tabs">
    				<span
    					class="tab"
    					v-for="item in tabList"
    					:key="item.path">
    					<router-link :to="item.path">{{ item.name }}</router-link>
    				</span>
    			</div>
    		</div>
    		<div class="main">
                <!-- 展示子路由的路由视图 -->
    			<router-view></router-view>
    		</div>
    	</div>
    </template>
    
    <script>javascript">
    export default {
    	data() {
    		return {
    			tabList: [
    				{ name: '关于', path: '/about' },
    				{ name: '留言', path: '/message' }
    			]
    		}
    	}
    }
    </script>
    
    <style lang="less" scoped>
    .home-container {
    	width: 100vw;
    	height: 100vh;
    	display: flex;
    	flex-direction: column;
    	.header {
    		height: 70px;
    		display: flex;
    		align-items: center;
    		justify-content: center;
    		border-bottom: 1px solid #666;
    		.tab {
    			margin-right: 20px;
    			font-size: 20px;
    		}
    	}
    	.main {
    		flex: 1;
    		width: 100%;
    	}
    }
    </style>
    
  6. 其余两个页面和本次问题关系不大,而且都很简单就不展示了

问题复现和解决

  1. 现在我打需求是在切换页面的时候,可以让留言页面输入的内容进行缓存

  2. 我们在 app.vue 下是使用 keep-alive,看看效果

    <template>
    	<div>
    		<!-- MessageVue 是留言组件的 name 属性 -->
    		<keep-alive :include="['MessageVue']">
    			<router-view></router-view>
    		</keep-alive>
    	</div>
    </template>
    
  3. 效果如图:

    在这里插入图片描述

  4. 现在是无法生效的,然后我们放在 HomeView 的路由出口上,如下:

    <template>
    	<div class="home-container">
    		<div class="header">
    			<div class="tabs">
    				<span
    					class="tab"
    					v-for="item in tabList"
    					:key="item.path">
    					<router-link :to="item.path">{{ item.name }}</router-link>
    				</span>
    			</div>
    		</div>
    		<div class="main">
    			<keep-alive :include="['MessageVue']">
    				<router-view></router-view>
    			</keep-alive>
    		</div>
    	</div>
    </template>
    
  5. 现在在看一下效果,如图:

    在这里插入图片描述

  6. 解决还是非常简单的,谨以此文记录我这次马虎的错误


http://www.niftyadmin.cn/n/5310150.html

相关文章

html 原生网页使用ElementPlus 日期控件el-date-picker换成中文

项目&#xff1a; 原生的html,加jQuery使用不习惯&#xff0c;新html页面导入vue3,element plus做界面&#xff0c;现在需要把日历上英文切成中文。 最终效果&#xff1a; 导入能让element plus日历变成中文脚本&#xff1a; elementplus, vue3对应的js都可以通过创建一个vu…

用python写个根据水库大坝安全监测excel数据自动生成word水库大坝安全监测报告

要实现这个功能&#xff0c;你需要使用Python中的一些库&#xff0c;如pandas用于处理Excel数据&#xff0c;python-docx用于生成Word文档。 以下是一个简单的示例&#xff0c;展示如何从Excel数据中读取数据&#xff0c;并使用python-docx生成Word报告。 首先&#xff0c;确保…

https配置证书

HTTPS 基本原理 https 介绍 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;其实 HTTPS 并不是一个新鲜协议&#xff0c;Google 很早就开始启用了&#xff0c;初衷是为了保证数据安全。 国内外的大型互联网…

mysql服务多实例运行

1、官网下载mysql安装包 https://downloads.mysql.com/archives/community/ 2、解压安装包 tar -zxvf mysql-8.1.0-linux-glibc2.28-aarch64.tar.xz -C /usr/localmv /usr/local/mysql-8.1.0-linux-glibc2.28-aarch64 /usr/local/mysql 3、创建mysql用户组 groupadd…

算法通关村学习经历分享

算法通关村学习经历分享 收到算法通关村的奖励啦 顺便分享一下在算法通关村的收获 在没有经历算法通过村之前我的状态&#xff1a; 因为以前学校上课对算法的讲解&#xff0c;让我埋下对算法的阴影&#xff08;主要讲的很笼统&#xff0c;内容又很多&#xff09;&#xff0c…

AI实景无人直播项目:开启自动直播新时代,一部手机即可实现增长

在当今社会&#xff0c;直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活&#xff0c;直播已经渗透到了各行各业。然而&#xff0c;传统直播方式存在着一些不足之处&#xff0c;如需现场主持人操作、高昂的费用等。近年来&a…

OpenVPN SSL/TLS方式连接

一. 前言 本文介绍OpenVPN最后一种连接方式&#xff0c;通过SSL/TLS认证方式连接&#xff0c;也就是利用公钥密码那套&#xff1a;首先生成根证书秘钥、利用根证书秘钥创建根证书、生成服务器私钥&#xff0c;利用根证书签发服务器证书&#xff0c;生成Diffie-Hellman文件&…

区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测

区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测 目录 区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CNN-LSTM-KDE多变量时间序列区…