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

vue动态路由切换刷新保留历史路由搜索条件数据

最近有客户反映我们系统按条件查询完列表进入详情页后再返回列表页时页面没有展示他查询的那条数据,而是进入页面一贯会展示按无条件查询的数据,希望我们能对列表做查询缓存,那咱们就用keep-alive来实现一下

AppMain.vue

include 属性绑定一个数组,数组里是打开需要缓存的路由name

<template><section class="app-main"><transition name="fade-transform" mode="out-in"><keep-alive :include="cachedViews"><router-view :key="key" /></keep-alive></transition></section>
</template>
<script>
export default {name: 'AppMain',computed: {cachedViews() {return this.$store.state.tagsView.cachedViews},key() {return this.$route.path}}
}
</script>

store文件夹下的getters.js

const getters = {visitedViews: state => state.tagsView.visitedViews,cachedViews: state => state.tagsView.cachedViews,
}
export default getters

store文件夹下的modules文件夹中创建tagsView.js文件

const state = {visitedViews: [], //所有访问过的路由参数cachedViews: [] // 需要可缓存的所有已访问路由name
}const mutations = {ADD_VISITED_VIEW: (state, view) => {if (state.visitedViews.some(v => v.path === view.path)) returnstate.visitedViews.push(Object.assign({}, view, {title: view.meta.title || 'no-name'}))},ADD_CACHED_VIEW: (state, view) => {if (state.cachedViews.includes(view.name)) returnif (!view.meta.noCache) {state.cachedViews.push(view.name)}},DEL_VISITED_VIEW: (state, view) => {for (const [i, v] of state.visitedViews.entries()) {if (v.path === view.path) {state.visitedViews.splice(i, 1)break}}},DEL_CACHED_VIEW: (state, view) => {const index = state.cachedViews.indexOf(view.name)index > -1 && state.cachedViews.splice(index, 1)},DEL_OTHERS_VISITED_VIEWS: (state, view) => {state.visitedViews = state.visitedViews.filter(v => {return v.meta.affix || v.path === view.path})},DEL_OTHERS_CACHED_VIEWS: (state, view) => {const index = state.cachedViews.indexOf(view.name)if (index > -1) {state.cachedViews = state.cachedViews.slice(index, index + 1)} else {state.cachedViews = []}},DEL_ALL_VISITED_VIEWS: state => {// keep affix tagsconst affixTags = state.visitedViews.filter(tag => tag.meta.affix)state.visitedViews = affixTags},DEL_ALL_CACHED_VIEWS: state => {state.cachedViews = []},UPDATE_VISITED_VIEW: (state, view) => {for (let v of state.visitedViews) {if (v.path === view.path) {v = Object.assign(v, view)break}}}
}const actions = {addView({ dispatch }, view) {dispatch('addVisitedView', view)dispatch('addCachedView', view)},addVisitedView({ commit }, view) {commit('ADD_VISITED_VIEW', view)},addCachedView({ commit }, view) {commit('ADD_CACHED_VIEW', view)},delView({ dispatch, state }, view) {return new Promise(resolve => {dispatch('delVisitedView', view)dispatch('delCachedView', view)resolve({visitedViews: [...state.visitedViews],cachedViews: [...state.cachedViews]})})},delVisitedView({ commit, state }, view) {return new Promise(resolve => {commit('DEL_VISITED_VIEW', view)resolve([...state.visitedViews])})},delCachedView({ commit, state }, view) {return new Promise(resolve => {commit('DEL_CACHED_VIEW', view)resolve([...state.cachedViews])})},delOthersViews({ dispatch, state }, view) {return new Promise(resolve => {dispatch('delOthersVisitedViews', view)dispatch('delOthersCachedViews', view)resolve({visitedViews: [...state.visitedViews],cachedViews: [...state.cachedViews]})})},delOthersVisitedViews({ commit, state }, view) {return new Promise(resolve => {commit('DEL_OTHERS_VISITED_VIEWS', view)resolve([...state.visitedViews])})},delOthersCachedViews({ commit, state }, view) {return new Promise(resolve => {commit('DEL_OTHERS_CACHED_VIEWS', view)resolve([...state.cachedViews])})},delAllViews({ dispatch, state }, view) {return new Promise(resolve => {dispatch('delAllVisitedViews', view)dispatch('delAllCachedViews', view)resolve({visitedViews: [...state.visitedViews],cachedViews: [...state.cachedViews]})})},delAllVisitedViews({ commit, state }) {return new Promise(resolve => {commit('DEL_ALL_VISITED_VIEWS')resolve([...state.visitedViews])})},delAllCachedViews({ commit, state }) {return new Promise(resolve => {commit('DEL_ALL_CACHED_VIEWS')resolve([...state.cachedViews])})},updateVisitedView({ commit }, view) {commit('UPDATE_VISITED_VIEW', view)}
}export default {namespaced: true,state,mutations,actions
}

最后

可以找个组件试一下,我这边已经实现了,效果可以自己去印证一下

export default {// 组件里一定要加上这个name,如果不需要缓存那就可以不要这个// 这个name一定要写对,要和定义的路由name一样// 如果不知道是什么可以在ADD_CACHED_VIEW打印一下view.namename: "Menu",
}

相关文章:

vue动态路由切换刷新保留历史路由搜索条件数据

最近有客户反映我们系统按条件查询完列表进入详情页后再返回列表页时页面没有展示他查询的那条数据&#xff0c;而是进入页面一贯会展示按无条件查询的数据&#xff0c;希望我们能对列表做查询缓存&#xff0c;那咱们就用keep-alive来实现一下 AppMain.vue include 属性绑定一个…...

免费:CAD批量转PDF工具,附下载地址

分享一款CAD 批量转PDF、打印的工具插件。能自动识别图框大小、自动识别比例、自动编号命名。重点&#xff01;重点&#xff01;重点&#xff01;自动将CAD的多张图纸一次性地、批量地转为PDF&#xff0c;或者打印。效果看下图&#xff1a; 适用环境&#xff1a; 32位系统 Auto…...

无涯教程-JavaScript - FACT函数

描述 The FACT function returns the factorial of a number. The factorial of a number is equal to 1&ast;2&ast;3&ast;...&ast; number. 语法 FACT (number)争论 Argument描述Required/OptionalNumberThe nonnegative number for which you want the f…...

UART 协议

文章目录 电气层硬件拓扑基本原理协议空闲位起始位数据位奇偶校验位无校验奇校验偶校验mark parityparity 停止位 波特率优缺点优点缺点 参考 UART(universal asynchronous receiver-transmitter) 通用异步收发器 分类特点导线2速度9600&#xff0c; 19200&#xff0c; 38400&…...

MySql中分割字符串

MySql中分割字符串 在MySql中分割字符串可以用到SUBSTRING_INDEX&#xff08;str, delim, count&#xff09; 参数解说       解释 str         需要拆分的字符串 delim         分隔符&#xff0c;通过某字符进行拆分 count          当 count 为正数&…...

Ubuntu 22.04安装过程

iso下载地址 Ubuntu Releases 1.进入引导菜单 选择Try or Install Ubuntu Server安装 2.选择安装语言 默认选择English 3.选择键盘布局 默认即可 4.选择安装服务器版本 最小化安装 5.配置网络 选择ipv4 选择自定义 DHCP也可 6.配置代理 有需要可以配置 这里跳过 7.软件源 …...

【算法|虚拟头节点|链表】移除链表元素

Leetcode203 移除链表元素 题目描述&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xf…...

express静态路由匹配引发的404错误

最近有一个react项目&#xff0c;我用webpack打包&#xff0c;然后使用express作为webserver跑起来。 但是在运行的时候&#xff0c;就白屏了&#xff0c;看console原来是报了404错误 可是代码里面明明有路由定义&#xff0c;为什么还是报404错误呢&#xff1f; app.get("…...

VHOST-SCSI代码分析(4)VHOST KICK机制

在VIRTIO框架中虚拟机通知QEMU数据准备好是通过操作MMIO&#xff0c;在KVM中将操作分发到QEMU中&#xff0c;由QEMU中模拟对应的MMIO操作&#xff08;图中红色部分&#xff09;。 VHOST框架虚拟机通知HOST内核数据准备好也是通过MMIO操作&#xff0c;但在函数vhost_dev_enable_…...

Docker Volume(存储卷)

文章目录 Docker Volume(存储卷)1.什么是存储卷&#xff1f;2.为什么需要存储卷&#xff1f;3. 存储卷的分类1) 管理卷Volume方式一&#xff1a;Volume命令操作方式二&#xff1a; -v 或者--mount 指定方式三&#xff1a; Dockerfile 匿名卷小结Docker 卷生命周期Docker 卷共享…...

【毕设选题】opencv 图像识别 指纹识别 - python

文章目录 0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测 4 OpenCV5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往…...

阿里云无影云电脑使用初体验:真的好用吗?

阿里云无影云电脑即无影云桌面&#xff0c;云桌面如何使用&#xff1f;云桌面购买后没有用户名和密码&#xff0c;先创建用户设置密码&#xff0c;才可以登录连接到云桌面。云桌面想要访问公网还需要开通互联网访问功能。阿里云百科来详细说下阿里云无影云电脑从购买、创建用户…...

无涯教程-JavaScript - FLOOR.MATH函数

描述 FLOOR.MATH函数将数字四舍五入到最接近的整数或最接近的有效倍数。 语法 FLOOR.MATH (number, significance, mode)争论 Argument描述Required/OptionalNumberThe number to be rounded down.RequiredSignificanceThe multiple to which you want to round.OptionalMo…...

Dubbo3基础使用

1、Dubbo概述 现在SpringCloud Alibaba比较火&#xff0c;用的比较多是吧&#xff0c;那dubbo是不是过时的呢&#xff1f; 并不是的&#xff0c;以前有人把Dubbo和SpringCloud进行对比&#xff0c;其实两者是不同维度的&#xff0c;不能对比&#xff0c;dubbo就是一个rpc框架&…...

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手&#xff0c;使用的时候我们先调用的with方法&#xff0c;源码中with有3个多载的方法&#xff1a;下图翻译过来就是activity用FragmentActivity Applicationcontext用 with&#xff08;Context&#xff09;还有一个with&#xff08;View)的 殊途…...

知识竞赛活动舞台搭建需要多少钱

知识竞赛活动舞台搭建的费用会根据不同的竞赛活动规模和要求而有所不同。对于小型的知识竞赛活动&#xff0c;如学校内部组织的知识竞赛或社区的知识竞赛活动&#xff0c;舞台搭建的费用往往相对较低。在这种情况下&#xff0c;可能只需要一些简单的装饰和道具&#xff0c;例如…...

07set注入级联属性和特殊字符及表达式语言

级联属性赋值(了解) 概述 级联属性赋值就是给某个对象属性的属性赋值,就是给对象关联的对象的属性赋值 Clazz班级类 public class Clazz {private String name;public Clazz() {}public Clazz(String name) {this.name name;}//set和get方法以及toString方法 }Student有cl…...

用AI在小红书做早教启蒙,2个月涨粉11.7万,获赞10万的新流量玩法

本期是赤辰第29期AI项目教程&#xff0c;底部准备了9月粉丝福利&#xff0c;可以免费领取。母婴、教育一直以来是最不缺流量的两大“真香”赛道。那么AI时代下有怎样新流量红利和玩法&#xff1f;接下来就给大家拆解一个在小红书上做AI绘画启蒙早教资源变现的新玩法&#xff01…...

Recommender Systems in the Era of Large Language Models (LLMs)

本文是LLM系列文章&#xff0c;针对《Recommender Systems in the Era of Large Language Models (LLMs)》的翻译。 大语言模型时代的推荐系统 摘要1 引言2 相关工作3 基于LLM推荐系统的深度表示学习4 预训练和微调LLM用于推荐系统5 提示LLM用于推荐系统6 未来方向6.1 幻觉缓解…...

红心向阳 百鸟朝凤

背景 最近在玩 folium 模块&#xff0c;基于使用过程中的一些个人体验&#xff0c;对 folium 进行了二次封装&#xff0c;开源在 GpsAndMap.在使用的过程中&#xff0c;发现在地图上打图标是可以进行旋转的。遇到就发现了一些有意思的玩法。 隔海的相望 下面的代码在地图 厦…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...