【Vue + keep-alive】路由缓存

news/2024/5/22 4:38:31

一. 需求

列表页,n 条数据项可打开 n 个标签页,同时1条数据项的查看和编辑共用一个标签页。如下所示:

在这里插入图片描述
参考

// 主页面
// 解决因 路由缓存,导致 编辑后跳转到该页面 不能实时更新数据
onActivated(() => {getList()
})

二. 实现

2.1 查看/编辑 返回 主页面

  1. 实现(template模块)
<!-- 修改/查看页 -->
<template><div style="padding:20px"><el-form ref="formName" :model="form" :rules="formRules"  label-width="120px"><template v-if="type == '查看'"><el-form-item><el-col :span="12"><el-form-item label="联系人" prop="contactName"><span>{{ form.contactName }}</span></el-form-item></el-col><el-col :span="12"><el-form-item label="学历" prop="education"><span>{{ form.education}}</span></el-form-item></el-col></el-form-item><el-form-item><el-col :span="12"><el-form-item label="手机号" prop="phone"><span>{{ form.phone }}</span></el-form-item></el-col><el-col :span="12"><el-form-item label="邮箱" prop="email"><span>{{ form.email }}</span></el-form-item></el-col></el-form-item><template><template v-else><el-form-item><el-col :span="12"><el-form-item label="联系人" prop="contactName"><el-input v-model="form.contactName" placeholder="请输入联系人" maxlength="20" show-word-limit /></el-form-item></el-col><el-col :span="12"><el-form-item label="学历" prop="education"><el-input v-model="form.education" placeholder="请输入学历" maxlength="20" show-word-limit /></el-form-item></el-col></el-form-item><el-form-item><el-col :span="12"><el-form-item label="手机号" prop="phonenumber"><el-input v-model="form.phonenumber" placeholder="请输入手机号" maxlength="11" show-word-limit /></el-form-item></el-col><el-col :span="12"><el-form-item label="邮箱" prop="email"><el-input v-model="form.email" placeholder="请输入邮箱" maxlength="20" show-word-limit /></el-form-item></el-col></el-form-item><template></el-form><div v-if="type == '修改'"><el-button @click="handleClick">取 消</el-button><el-button type="primary" @click="handleSubmit">确 认</el-button></div></div>
</template>

2.2 返回上一页(script 跳转方式)

修改成功/点击取消 返回主页面

  1. 错误:打开新的标签页
    在这里插入图片描述
/** 确认按钮 */
const submitForm = () => {proxy.$refs['formName'].validate(valid => {if (valid) {if (type.value === '修改') {// 调用接口update({ id: detailId, ...form.value }).then(res => {if (res.code === 200) {proxy.$modal.msgSuccess('修改成功')setTimeout(() => {// 返回上一页handleClick()}, 2000)}})}}})
}
/** 取消 返回到上一页,避免打开新的标签页 */
const handleClick = async() => {await router.push({ path: `/xxx` })
}
  1. 正确:不打开新标签页,返回原来的主页面
    在这里插入图片描述
/** 确认按钮 */
const submitForm = () => {proxy.$refs['formName'].validate(valid => {if (valid) {if (type.value === '修改') {// 调用接口update({ id: detailId, ...form.value }).then(res => {if (res.code === 200) {proxy.$modal.msgSuccess('修改成功')setTimeout(() => {// 返回上一页handleClick()}, 2000)}})}}})
}
/** 取消 返回到上一页,避免打开新的标签页 */
const handleClick = () => {router.go(-1)
}

2.3 不同 【修改/查看】标签页相互切换

  1. 期望

修改和查看的显示内容,不会因处在同一个页面互相影响。且在切换不同标签时,不会出现数据紊乱情况

  1. 实现
<script setup name="Detail">
const route = useRoute() // route.type 判断编辑还是查看
const type = ref('') // 编辑/查看
// 路由监听
watch(() => route.query.type,newValue => {type.value = newValue
},{deep: true, immediate: true}
)
</script>
  1. 问题

代码中限制了不能重复调用接口。所以在切换不同 修改/查看 标签页 时一直提醒重复调用。

  ① 原因
  路由缓存

<template><!-- vue3.0配置 --><router-view v-slot="{ Component }"><keep-alive>//  v-if="$route.meta.keepAlive"<component :is="Component" /></keep-alive></router-view> 
</template>

  ② 解决:清楚缓存

/**
* name:'',     // 路由名称
* query:'{"id","1","type":"编辑"}',
* meta:{
* 	keepAlive  // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false),
* 	icon:''    // 图标名称
* 	title:''   // 名称
* }
* /{path: "/Detail",name: "Detail",meta: {keepAlive: true // 设置页面是否需要使用缓存},component: () => import("@/views/xxx/Detail/index.vue")},


在这里插入图片描述

三. 知识点

  1. 路由跳转数据未实时更新,参考1,参考2
  2. 路由缓存,参考
  3. 退回到上一页

http://www.mrgr.cn/p/40268800

相关文章

Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?

虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系&#xff0c;只是最近在整理 Flutter 相关资料时发现还挺多人不了解&#xff0c;就放到一起聊聊。 本篇也是主要将现有资料做一些简化整合理解。 前言 其实为什么会有 HTTP3/QUIC &#xff1f;核心原因还是现有协议已经无法满…

基于GAN的图像补全实战

数据与代码地址见文末 论文地址:http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf 1.概述 图像补全,即补全图像中的覆盖和缺失部分, 网络整体结构如下图所示,整体网络结构还是采取GAN,对于生成器,网络结构采取Unet的形式,首先使用卷积…

Spyder修改python解释器

Spyder更改为python3.10解释器因为系统安装的python版本为3.10,但是官网下载最新的Spyder内置python版本为3.7.9,强迫症一犯就想着更改成3.10,步骤如下: 偏好里面更改控制台的运行方式(根据个人习惯设置就行,这里设置在专用控制台运行) 安装IPython先用pip3 list查看一下…

你的数据库用对索引了吗?一文揭秘PolarDB XPlan索引选择

深度解读PolarDB分布式版XPlan的索引选择​对于数据库来说,正确地选择索引是基本要求,选错索引轻则导致查询缓慢,重则导致数据库整体不可用。PolarDB分布式版存在多种不同的索引:局部索引、全局索引、列存索引、归档表索引。局部索引就是单机数据库上常用的索引,目的是避免…

论文复现---MUTANT

Robust anomaly detection for multivariate time series through temporal GCNs and attention-based VAE 基于时序神经网络和基于注意力的VAE的多变量时间序列鲁棒异常检测 https://github.com/Coac-syf/MUTANT * numpy1.21.2* torch1.9.1* scipy1.7.1* scikit-learn0.24.2*…

vue中websocket的使用---详解

一、什么是webscoketWebSockets 是一种先进的技术,它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此 API,可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。WebSockets 这种技术中有一个接口名为WebSocket,它是一个用于连接 W…

ARP代理

10.1.0.1/8 和10.2.0.1/8是在同一个网段 10.1.0.2/16 和10.2.0.2/16 不在同一个网段 10.1.0.1/8 和10.1.0.2/16 是可以ping通的 包发出来了&#xff0c;报文有发出来&#xff0c;目的地址是广播包 广播请求&#xff0c;发到路由器的接口G 0/0/0 target不是本接口&#xff0…

Neo4j 图形数据库中有哪些构建块?

Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性&#xff0c;如下图所示。 NEmployee 节点 在这里&#xff0c;节点 Name "Employee" &#xff0c;它包含一组属性作为键值对。 属性 属性是…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元&#xff0c;然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标&#xff0c;输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

uniCloud云函数概述---云对象

云对象是普通云函数的升级版,功能和云函数是一样的。它在大多数场景下替代了普通云函数。 云对象是对象化的云函数,比如一个文章云对象,它可以包括文章的创建,文章的删除,文章的编辑等功能。 (一句话描述云对象: 等同于PHP后端部份)一、创建云对象 打开项目,找到uniCl…

Docker Container (容器) 常见命令

Docker 容器的生命周期 什么是容器&#xff1f; 通俗地讲&#xff0c;容器是镜像的运行实体。镜像是静态的只读文件&#xff0c;而容器带有运行时需要的可写文件层&#xff0c;并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容 器有初建、运行、停止、暂停和删除…

JSNeat: Recovering Variable Names for Minified Code with Usage Contexts

发表:ICSE,2019,德克萨斯大学达拉斯分校计算机科学系,Tien N. Nguyen团队(https://personal.utdallas.edu/~tien.n.nguyen/) 开源:https://github.com/trunghieu-tran/RecoverJSName-JSNeat 主要内容本文提出了一种基于信息检索(IR)的方法JSNEAT来恢复经过混淆的JS代码…

HarmonyOS 简易封装网络请求框架

设计思路网络请求框架的设计目标是简化 HTTP 请求的发送和响应处理过程。为了实现这一目标,我们定义了几个核心组件:IHttpRequest: 定义了发送 HTTP 请求的基本操作,如设置 URL、请求头、请求参数等。 IHttpListener: 定义了 HTTP 请求完成后的回调方法,用于处理请求的成功…

QOJ5717

好,好难。非常好题目,拜谢 Itst。不过如果我去考这场估计就哈哈了。\(k = 3\) 都能卡。 还是要避免一条路走到黑啊。懂得变通。\(k=1\) 是送的。 \(k=2\) 较为平凡,只需要将相对大的、相对小的各放一起。 \(k=3\) 不简单了。首先二分答案 \(mid\),经过 800 万年转换视角,钦…

运行程序时出现mschrt20.ocx未注册找不到控件问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mschrt20.ocx文件(挑选合适的版本文…

libtorch模型预测环境配置说明

1、cuda环境 (1)更新nvidia显卡驱动 首先在NVIDIA官网下载与电脑显卡类型一致的显卡驱动,我的显卡是quadro P2000,下载对应的显卡驱动程序安装。 474.82-quadro-rtx-desktop-notebook-win10-win11-64bit-international-whql.exe (2)cuda的安装 显卡驱动安装完成后,NVIDI…

每日两题2

不同路径 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m1, vector<int>(n1,0));//创建dp表dp[0][1] 1;//初始化//填表for(int i 1; i < m; i){for(int j 1; j < n; j){dp[i][j] dp[i-1][j] dp[i][j-1];}}ret…

支持标准OPS接口,通用型RK3568工控板上新!

HD-RK3568-OPS主板基于HD-RK3568-CORE 工业级核心板设计,搭载1.8GHz主频的高性能ARM处理器,适用于工业现场应用需求。主板支持标准OPS接口、支持前后HDMI双路输出,具有即插即用、操作简单的特点,亦适用于数字标牌、自助终端、教育一体机等应用场景。 ​ 主要功能包括: OP…

5-02. 创建 AudioMixer 实现音乐音效的控制和切换

创建 AudioMixer修改 AudioMixer 可以增加 Snapshots可以增加 Groups创建一个只有背景音乐的快照静音的快照暴露音量 选中 Music,然后右键 Music然后就能在 Exposed Parameters 看到暴露出来的变量可以改名为 MusicVolume用同样的方法暴露出 Ambient 并修改名字用同样的方法暴…

MBR40100PT-ASEMI肖特基二极管MBR40100PT

MBR40100PT-ASEMI肖特基二极管MBR40100PT编辑:ll MBR40100PT-ASEMI肖特基二极管MBR40100PT 型号:MBR40100PT 品牌:ASEMI 封装:TO-247 最大平均正向电流(IF):40A 最大循环峰值反向电压(VRRM):100V 最大正向电压(VF):0.88V 工作温度:-40C~170C 反向恢复时间:5ns 芯…