vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive

keepalive没有效果,无法缓存页面?

问题大概是组件的name值不对应,vue2修改组件文件的name值,vue3保持组件文件名称和路由页面配置的name一致就可以了,如果vue3不想保持一致,必须手动在文件后面添加export...如下。

vue3不修改文件名称,但实现效果:

核心代码和全部代码:

javascript 复制代码
<script>
export default {
  name: 'ppidPage'
}
</script>
javascript 复制代码
<template>
  <PpidConfig />
</template>
<script setup>
import { onMounted } from 'vue'
import PpidConfig from './PpidConfig.vue'
import { usePpidStore } from '@/store/operation/ppid.js'
const ppidStore = usePpidStore()
onMounted(async () => {
  await ppidStore.getAllUnits()
})
</script>
<script>
export default {
  name: 'ppidPage'
}
</script>

keepalive文件:

javascript 复制代码
<template>
  <section class="app-main">
    <router-view v-slot="{ Component }">
      <transition name="fade-transform" mode="out-in">
        <keep-alive :include="cachedViews">
          <component :is="Component" :key="key" />
        </keep-alive>
      </transition>
    </router-view>
  </section>
</template>

<script setup>
import { computed } from 'vue'
import { useTagsViewStore } from '@/store/tagsView'
import { useRoute } from 'vue-router';
const route = useRoute();
const tagsViewStore = useTagsViewStore()

// 缓存的路由组件名称列表
const cachedViews = computed(() => {
  console.log('当前缓存页面:', tagsViewStore.cachedViews)
  // return tagsViewStore.cachedViews
  return tagsViewStore.cachedViews.filter(item => {
    if (route.name == item && !route.meta.keepAlive) {  //keepAlive为false不缓存
      return false;
    } else {
      return true;
    }
  })
})
</script>

<style scoped></style>

router.js页面配置:

javascript 复制代码
{
      path: 'ppid-config',
      permission: 'Operation.PPID',
      component: () => import('@/views/operation/ppid/ppidPage.vue'),
      name: 'ppidPage',
      meta: {
        title: t('route.operation.ppidConfig'),
        keepAlive: true
      }
    },

vue3 setup组件的name值无法修改,最终的name值会跟文件名称生成一致的。

vue2中可以动态修改组件name值,如下位置:

javascript 复制代码
<script lang="ts">
export default {
  name: 'User',    //修改组件的name值
  data(){
    return {
    }
  }
}
</script>

vue官网文档说明:

其他

存在transition组件的写法:

javascript 复制代码
<router-view v-slot="{ Component }" v-show="$route.meta.keepAlive">
      <transition name="fade-transform" mode="out-in">
        <keep-alive :include="cachedViews">
          <component :is="Component" :key="key" />
        </keep-alive>
      </transition>
    </router-view>
    <router-view v-slot="{ Component }" v-if="!$route.meta.keepAlive">
      <transition name="fade-transform" mode="out-in">
        <component :is="Component" :key="key" />
      </transition>
    </router-view>

相关链接:

https://cn.vuejs.org/guide/built-ins/keep-alive.html

vue3 keep-alive include失效问题_<router-view> <template #default="{ component, rou-CSDN博客

相关推荐
祈澈菇凉40 分钟前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w1 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好1 小时前
css文本属性
前端·css
qianmoQ1 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1682 小时前
golang时间相关函数总结
服务器·前端·golang·time
White graces2 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼2 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
想要打 Acm 的小周同学呀2 小时前
Redis三剑客解决方案
数据库·redis·缓存
bubusa~>_<2 小时前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
yanglamei19623 小时前
基于Python+Django+Vue的旅游景区推荐系统系统设计与实现源代码+数据库+使用说明
vue.js·python·django