1 <template> 2 <router-view v-slot="{ Component }"> 3 <keep-alive v-for="cache in cacheKeys" :key="cache"> 4 <component v-if="cache === key" :key="key" :is="Component" /> 5 </keep-alive> 6 <component v-if="!keepAlive" :key="key" :is="Component" /> 7 </router-view> 8 </template> 9 10 <script lang="ts" setup> 11 // 工具 12 import { computed } from "vue"; 13 import { useStore } from "vuex"; 14 import { useRoute } from "vue-router"; 15 16 // 工具实例 17 const store = useStore(); 18 const route = useRoute(); 19 20 // 键值 21 const key = computed(() => { 22 const value = route.meta.key; 23 return typeof value === "function" ? value(route) : (value || route.fullPath); 24 }); 25 26 // 缓存键列表 27 const cacheKeys = computed(() => { 28 return store.getters["tabs/cacheKeys"] as string[]; 29 }); 30 31 // 是否缓存 32 const keepAlive = computed(() => { 33 return cacheKeys.value.includes(key.value); 34 }); 35 </script>