Skip to content

keepAlivePlugin - 路由缓存

什么是 keepAlivePlugin?

keepAlivePlugin 是一个用于路由缓存的插件。它可以让用户在页面之间切换时保持页面的状态,避免重复加载和重新渲染,提升用户体验和系统性能。

INFO

无需给路由对应的组件设置名称,基础缓存也无需在路由配置中设置 name 属性

启用插件

typescript
import { createRouter, keepAlivePlugin } from '@pro/router'

const router = createRouter({
  // ... 其他配置
  plugins: [
    keepAlivePlugin()
  ]
})

在组件中

vue
<template>
  <router-view v-slot="{ Component }">
    <keep-alive :include="$router.cachedComponentNames.value">
      <component :is="Component" />
    </keep-alive>
  </router-view>
</template>

在路由中配置

typescript
const routes = [
  {
    path: '/dashboard',
    component: Dashboard,
    meta: {
      keepAlive: true, // 启用缓存
    }
  },
  {
    path: '/user',
    name: 'User',
    component: User,
    meta: {
      keepAlive: {
        include: ['Role'] // 只有当 /user 导航到 /role 时,/user 路由才会被缓存
      }
    }
  },
  {
    path: '/role',
    name: 'Role',
    component: Role,
    meta: {
      keepAlive: {
        exclude: ['User'] // 当 /role 导航到非 /user 时,/role 路由才会被缓存
      },
    }
  },
]

插件配置选项

选项类型默认值说明
defaultKeepAlivebooleanfalse选填,默认是否缓存

路由 Meta 配置选项

选项类型默认值说明
keepAliveboolean | { include: string[]; exclude: string[] }false选填,当为 boolean 时,表示是否缓存当前路由,当配置为 { include: string[] } 时,表示只有导航到 include 中的路由时,当前路由才会被缓存,当配置为 { exclude: string[] } 时,表示只有导航到非 exclude 中的路由时,当前路由才会被缓存,string[] 代表对应路由的 name 属性,需在对应路由中书写 name 属性,路由中的配置优先级大于插件选项配置