app.vue
<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>
避免出现如下页面跳转错误,需要加key区分
router.js
例如:特别多层的嵌套,要缓存 F 页面,设置 keepAlive: true
{
path: '/A',
name: 'A',
meta: { isAuth: false, title: 'A' },
component: () => import('@/views/A.vue'),
children: [
{
path: 'C',
name: 'C',
meta: { isAuth: false, title: '' },
component: () => import('@/views/C.vue'),
children: [
{
path: 'E',
name: 'E',
meta: { isAuth: false, title: '' },
component: () => import('@/views/E.vue'),
redirect: { name: 'F' },
children: [
{
path: 'F',
name: 'F',
meta: { isAuth: false, title: '',keepAlive: true },
component: () => import('@/views/F.vue'),
},
因为是通过 E 页面重定向到 F ,E 页面的 router-view 也要写成这样 ,keepalive 才有用
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" v-if="$route.meta.keepAlive"/>
</keep-alive>
<component :is="Component" v-if="!$route.meta.keepAlive"/>
</router-view>
亲测有效