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

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

时间:2024-07-06 11:28:09浏览次数:24  
标签:缓存 name wrapperName 跳转 newVal Vue3 query 路由

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 方法

    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 参数的路由分别进行缓存

// 监听路由,判断页面是否需要缓存
    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

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

标签:缓存,name,wrapperName,跳转,newVal,Vue3,query,路由
From: https://blog.csdn.net/qq_43225508/article/details/140225685

相关文章

  • Pinia 实用教程【Vue3 状态管理】状态持久化 pinia-plugin-persistedstate,异步Action,s
    什么是状态管理?全局状态Store(如Pinia)是一个保存状态和业务逻辑的实体,与组件树没有绑定,有点像一个永远存在的组件,每个组件都可以读取和写入它。三大核心概念state属性——相当于组件中的datagetter计算属性——相当于组件中的computedaction操作属性的......
  • vue 实现跳转第三方平台
    在Vue中实现跳转到第三方平台,通常可以通过几种方式来完成,具体取决于你是想在当前浏览器窗口打开链接,还是新开一个窗口,或者使用iframe嵌入等。以下是一些常见方法:1.使用<a>标签直接跳转最简单直接的方法是使用HTML的<a>标签,设置href属性为目标URL。<template><div>......
  • HTML【详解】超链接 a 标签的四大功能(页面跳转、页内滚动【锚点】、页面刷新、文件下
    超链接a标签主要有以下功能:跳转到其他页面<ahref="https://www.baidu.com/"target="_blank">百度</a>href:目标页面的url地址或同网站的其他页面地址,如detail.htmltarget:打开目标页面的方式_self:在同一个网页中显示(默认值)_blank:在新的窗口中打开【常用】_......
  • vue3【提效】使用 VueUse 高效开发(工具库 @vueuse/core + 新增的组件库 @vueuse/compo
    Vueuse是一个功能强大的Vue.js生态系统工具库,提供了可重用的组件和函数,帮助开发者更轻松地构建复杂的应用程序。官网:https://vueuse.org/core/useWindowScroll/安装VueUsenpmi@vueuse/core@vueuse/components(可选)安装自动导入,添加到imports中//需......
  • 小红薯私域引流新策略:一键跳转卡片制作与详情指南!
    小红薯私域引流新策略:一键跳转卡片制作与详情指南!大家好,今天要介绍的是一款牛啵一的小红薯跳转卡片。https://mp.weixin.qq.com/s?__biz=Mzk0MTY0NjA2Mg==&mid=2247485260&idx=1&sn=281edce48cc6193a6e46769618c9f9fd&chksm=c2ce0ecdf5b987dba3c09d383ed19fa6bf566f21416546......
  • 运维锅总详解计算机缓存溢出
    本文尝试从缓存溢出、如何平衡防止缓存溢出和OOM、conntrack缓存满载影响及优化措施、TCP/IP协议栈缓存满载影响及优化措施等方面对计算机缓存溢出进行详细分析,最后给出一些缓存满载的Prometheus告警规则。希望对您有所帮助!一、计算机缓存溢出简介缓存溢出(CacheOverflow)......
  • 初学vue3, 全是黑盒子,vue3知识点汇总
    学习Vue.js应该像学习一门编程语言一样,首先要熟练掌握常用的知识,而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓,然后再逐步补充细节。千万不要像学习算法那样,一开始就钻牛角尖。前序:vueAPI的风格分为:选项式和组合式,vue2中一般用选项式,所......
  • 内存缓存选型
    背景tcp网关出现了内存泄漏的现象,经排查后发现是一个java原生内存缓存导致的。Map<String,String>belongCache=newConcurrentHashMap<>();该内存缓存作为兜底缓存使用,主要逻辑是读取redis用户身份信息后,有则更新到内存缓存,没有则从内存缓存中获取缓存数据。该内存缓存直......
  • vue3 父子组件双向绑定
    父组件ParentComponent.vue<!--ParentComponent.vue--><template><div>子组件输入的数据<p>ParentValue:{{parentValue}}</p>父输入框<inputv-model="parentValue"><CustomInputv-model="par......
  • vue2和vue3自定义指令实现只读模式,禁止用户编辑
    解决代码表单组件大量disable的麻烦,实现只读。只需要在需要的地方加上v-read-only即可达到只读效果,快捷方便。实现思路父元素下添加一个遮罩层元素遮罩层元素的显示隐藏由参数决定要想简单快捷的实现,最好用的就是写一个遮罩层,通过遮罩来隔绝用户的操作。原始代码如下:<temp......