Vue3 对跳转 同一路由传入不同参数的页面分别进行缓存

server/2024/10/20 6:06:45/

1:使用场景

     从列表页跳转至不同的详情页面,对这些详情页面分别进行缓存

2:核心代码

2.1: 配置路由文件

在路由文件里对需要进行缓存的路由对象添加meta 属性

 // 需要缓存的详情页面路由
  {
    name: detail,
    path: '/myRouter/detail', // 路径
    component: () => import('../views/abc/detail.vue'),
    meta: {
      keepAlive: true, // 是否被缓存
    },
  },

2.2: app页面增加缓存逻辑

<template>
  <el-config-provider :locale="locale">
    <!-- 有条件的进行缓存 -->
    <transition mode="out-in" name="fade">

      <router-view v-slot="{ Component }">
        <keep-alive :include="includeList">
          <component :is="wrap(route?.name , route.query, Component)" :key="route.fullPath" />
        </keep-alive>
      </router-view>
    </transition>
  </el-config-provider>
</template>

wrap 方法

javascript">    const wrapperMap = new Map();const wrap = (name:any, query:any, component:any) => {let wrapper;let wrapperName;if(query.catchName){wrapperName = name + '-' + query.catchName;}else {wrapperName  = name;}if (wrapperMap.has(wrapperName)) {wrapper = wrapperMap.get(wrapperName);} else {wrapper = {name: wrapperName,render() {return h('div', { className: 'vaf-page-wrapper' }, component);},};wrapperMap.set(wrapperName, wrapper);}return h(wrapper);};

watch 监听对于route.query 是否存在catchName 参数的路由分别进行缓存

javascript">// 监听路由,判断页面是否需要缓存watch(() => route,(newVal: any, oldVal) => {if (newVal.query?.catchName) {if (newVal.meta.keepAlive && !state.includeList.includes(newVal.name + '-' + newVal.query?.catchName)) {state.includeList.push(newVal.name + '-' + newVal.query?.catchName);}} else if (newVal.meta.keepAlive && !state.includeList.includes(newVal.name)) {state.includeList.push(newVal.name);}},{deep: true, // 开启深度监听},);

2.3: 在列表页面的查看点击方法中配置路由添加query 传参 catchName

注:上面为核心代码逻辑,需要根据实际情况进行调整。


http://www.ppmy.cn/server/55911.html

相关文章

2024北京大健康展,北京健康生活产品展览会十月举办

2024北京健博会&#xff0c;立足北京&#xff0c;效应辐射全国买方市场&#xff0c;助力健康中国事业建设&#xff1b; 2024第11届中国&#xff08;北京&#xff09;国际大健康产业博览会 The 2024 China (Beijing) International Health Service Expo 时间&#xff1a;2024年…

Redis基本命令源码解析-字符串命令

1. set 用于将kv设置到数据库中 2. mset 批量设置kv mset (msetnx) key1 value1 key2 value2 ... mset:msetCommand msetnx:msetnxCommand msetCommand和msetnxCommand都调用msetGenericCommand 2.1 msetGenericCommand 如果参数个数为偶数,则响应参数错误并返回 如果…

2024亚太杯中文赛数学建模B题word+PDF+代码

2024年第十四届亚太地区大学生数学建模竞赛&#xff08;中文赛项&#xff09;B题洪水灾害的数据分析与预测&#xff1a;建立指标相关性与多重共线性分析模型、洪水风险分层与预警评价模型、洪水发生概率的非线性预测优化模型&#xff0c;以及大规模样本预测与分布特征分析模型 …

如何将Grammarly内嵌到word中(超简单!)

1、下载 安装包下载链接见文章结尾 官网的grammarly好像只能作为单独软件使用&#xff0c;无法内嵌到word中&#x1f9d0;&#x1f9d0;&#x1f9d0; 2、双击安装包&#xff08;安装之前把Office文件都关掉&#xff09; 3、安装完成&#xff0c;在桌面新建个word文件并打开 注…

解决expand-change第一次展开无数据显示与实现

最近写需求时用到了expand-change表格展开回调&#xff0c;但我发现第一次展开后并没有展示任何数据&#xff0c;但我的返回值是存在的&#xff0c;当第二次展开时发现数据就有了。此原因是因为获取数据的接口是异步的&#xff0c;导致Dom渲染不同步导致的&#xff0c;其实解决…

备考AMC8和AMC10竞赛,吃透2000以来1850道真题和解析(持续)

距离2024年AMC10竞赛还有3个多月的时间&#xff0c;距离2025年AMC8竞赛还有6个多月的时间&#xff0c;那么&#xff0c;如何备考接下来的AMC8、AMC10竞赛呢&#xff1f; 做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。 通过做真题&#xff0c;可…

容器自动化:docker-compose

ansible一键部署docker-compus+lnmp+lnmt项目 一、docker-compose 我们知道使用一个dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排,服务编排有多种技术方案。 1.1、docker-compose简介 docker-compose项目是docker官方的开源项目,…

「技术分享」FDL对接金蝶云API取数

很多企业的ERP系统都在用金蝶云星空&#xff0c;金蝶云星空API是IT人员获取数据的重要来源&#xff0c; 常常用来生成定制化报表&#xff0c;进行数据分析&#xff0c;或是将金蝶云的数据与OA系统、BI工具集成。 通常情况下&#xff0c;IT人员需要使用Python、Java等语言编写脚…