程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

    • 前端通用方法
    • 前端开发规范
    • 前端请求流程
    • 前端路由使用
    • Vue 组件使用
    • 前端动态菜单
    • 前端权限控制
    • 前台菜单管理
    • 多级目录与路由
    • 前端页签缓存
      • 一、确保路由与组件名称一致
        • 1. 路由配置示例
        • 2. 视图组件配置示例
      • 二、keep-alive 的使用注意事项
      • 三、实际使用案例
        • 1. 路由配置
        • 2. 视图组件配置
        • 3. 在 keep-alive 中使用
      • 四、额外提示
    • 使用 Svg Icon 图标
    • 使用字典功能
    • 动态系统参数
    • Axios 封装
    • 切换访问路径
    • 内容复制功能
  • 组件文档

  • 数据库分析

  • 若依框架
  • 前端手册
scholar
2024-08-31
目录

前端页签缓存

# 页签缓存与 keep-alive 使用指南

在 Vue.js 项目中,keep-alive 是用于缓存组件状态的常用功能,尤其在多页签应用中,可以避免重复加载页面内容,提高用户体验。然而,keep-alive 与 router-view 之间是强耦合的,因此在配置路由和对应的视图组件时,需确保名称的一致性。本指南将详细讲解如何正确使用 keep-alive 实现页签缓存,并提供一些实用的提示。

# 一、确保路由与组件名称一致

keep-alive 的 include 属性默认是优先匹配组件的 name 属性。因此,在编写路由和视图组件时,必须确保两者的 name 属性完全一致,以便正确应用缓存。

# 1. 路由配置示例

在路由声明中,确保为路径对应的组件配置 name 属性:

{
  path: 'config',
  component: () => import('@/views/system/config/index'),
  name: 'Config',  // 路由的name属性
  meta: { title: '参数设置', icon: 'edit' }
}
1
2
3
4
5
6

# 2. 视图组件配置示例

在视图组件中,同样需要配置 name 属性,并且要与路由中定义的 name 属性一致:

// system/config/index.vue
export default {
  name: 'Config'  // 视图组件的name属性
}
1
2
3
4

注意: 如果 name 不一致,keep-alive 将不会缓存该组件。

# 二、keep-alive 的使用注意事项

  1. 唯一性: name 属性的命名要尽量保持唯一性,避免与其他组件名称重复。这是因为 keep-alive 会根据 name 来缓存组件,重复命名可能导致内存泄漏或其他不可预见的问题。

  2. 动态菜单缓存配置: 在若依系统中,管理员可以通过系统管理的菜单管理界面配置某些菜单页签是否需要缓存。默认情况下,菜单页签是启用缓存的。

# 三、实际使用案例

假设你在系统管理模块中有一个参数设置页面,并且希望它在用户切换到其他页面后能够保留状态,即启用缓存。

# 1. 路由配置

{
  path: '/system/config',
  component: () => import('@/views/system/config/index'),
  name: 'Config',
  meta: { title: '参数设置', icon: 'edit', noCache: false }  // 确保 noCache 设置为 false
}
1
2
3
4
5
6

# 2. 视图组件配置

// system/config/index.vue
export default {
  name: 'Config'  // 与路由中的name一致
}
1
2
3
4

# 3. 在 keep-alive 中使用

在布局组件或其他全局组件中,通过 keep-alive 包裹 router-view,并使用 include 属性指定需要缓存的组件:

<keep-alive :include="['Config']">
  <router-view />
</keep-alive>
1
2
3

# 四、额外提示

  1. 默认不缓存: 如果不配置 name,或在 meta 中设置 noCache: true,则该组件默认不会被缓存。

  2. 动态控制缓存: 可以通过 meta 字段动态控制是否缓存某个路由组件。例如,在菜单管理中,可以直接设置某个菜单项是否需要缓存,该设置会影响到 keep-alive 的行为。

总结

确保路由配置与视图组件中的 name 属性一致,是实现 keep-alive 正确缓存的关键。通过合理配置和使用 keep-alive,可以有效提升页面响应速度和用户体验。在项目中,特别是多页签的应用场景下,缓存的正确使用将极大提升系统的性能和稳定性。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
多级目录与路由
使用 Svg Icon 图标

← 多级目录与路由 使用 Svg Icon 图标→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式