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

07-08 1320阅读

1:使用场景

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

Vue3 对跳转 同一路由传入不同参数的页面分别进行缓存
(图片来源网络,侵删)

2:核心代码

2.1: 配置路由文件

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

 // 需要缓存的详情页面路由

  {

    name: detail,

    path: '/myRouter/detail', // 路径

    component: () => import('../views/abc/detail.vue'),

    meta: {

      keepAlive: true, // 是否被缓存

    },

  },

2.2: app页面增加缓存逻辑

 

   

   

     

       

         

       

     

   

 

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

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

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]