补充:其实不依赖 defineOptions 插件设置 name 的方式也可以实现。
App.vue
<template>
<div id="app" class="container">
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" :key="$route.name" v-if="$route.meta.keepAlive" />
</keep-alive>
<component :is="Component" :key="$route.name" v-if="!$route.meta.keepAlive" />
</router-view>
</div>
</template>
<script setup lang="ts">
</script>
<style lang="scss" scoped>
#app {
}
</style>
router.js
import { closeToast } from 'vant'
import { Router, createRouter, createWebHashHistory } from 'vue-router'
const routes = [
{ name: 'address', path: '/address', component: () => import('@/views/address/index.vue'), meta: { title: '地址', keepAlive: true } }, },
]
const router: Router = createRouter({
scrollBehavior: () => ({ left: 0, top: 0 }),
routes,
history: createWebHashHistory()
})
router.afterEach((to) => {
closeToast()
})
export default router
App.vue
<template>
<div id="app" class="container">
<router-view v-slot="{ Component }">
<keep-alive :include="['peopleList', 'addressList']">
<component :is="Component" />
</keep-alive>
</router-view>
</div>
</template>
peopleList.vue
defineOptions({
name: 'peopleList'
})
defineOptions 插件
vue3 setup 语法糖配置 name 属性需要使用 defineOptions 插件
pnpm i unplugin-vue-define-options
vite.config.js
import DefineOptions from 'unplugin-vue-define-options/vite'
plugins: [
DefineOptions(),
]
tsconfig.json
{
"compilerOptions": {
"types": ["unplugin-vue-define-options/macros-global"]
},
}