honkun6头像
vue 表格组件 vxe-table 实现将用户自定义列设置/个性化列功能保存到本地封面图

vue 表格组件 vxe-table 实现将用户自定义列设置/个性化列功能保存到本地

用户在工具栏中调整了列的显示隐藏、顺序、宽度、冻结状态后,刷新页面往往全部丢失。vxe-table 的自定义列(customConfig)支持把用户的个性化设置持久化到 IndexedDB 或 localStorage,刷新后自动恢复。本文说明启用方式、必填前提,以及 customConfig 与全局 storeOptions 的关系。

vxe-table 如何把用户自定义列设置保存到本地?

为表格设置全局唯一的 id,开启 toolbarConfig.custom: true 启用工具栏自定义按钮,并在 customConfig 中设置 storage: true 与 storeDriver: ‘indexedDB’(或 ‘localStorage’)。用户调整列后,设置自动写入本地;刷新页面时按同一个 id 读取并恢复。

  • 生效前提:
    • 表格 id 必须全局唯一。个性化记忆以 id 为键存储,重复 id 会导致多个表格互相覆盖配置。
    • 每一列必须设置唯一的 field。包括 type: ‘seq’、type: ‘checkbox’ 等非数据列,以及分组列头的父级列,都需要一个唯一标识字段,否则该列的个性化状态无法被正确记录和恢复。
    • toolbarConfig.custom: true 必须开启,用户才有入口触发自定义列操作。
    • columnConfig.drag 与 columnConfig.resizable 建议同时开启,否则用户无法拖拽排序、调整列宽,可保存的内容会受限。
  • 预期结果:用户通过工具栏调整列顺序、显隐、宽度、冻结后,刷新页面,表格列状态与上次一致;不同 id 的表格互不影响。

代码

下面的配置用于开启自定义列本地存储,存储方式为 IndexedDB:

image

<template>
  <div>
    <vxe-grid v-bind="gridOptions"></vxe-grid>
  </div>
</template>

<script setup>
import { reactive } from 'vue'

const gridOptions = reactive({
  border: true,
  id: 'myCustomStorage1',
  rowConfig: {
    keyField: 'id'
  },
  toolbarConfig: {
    custom: true
  },
  customConfig: {
    storage: true,
    storeDriver: 'indexedDB',
    mode: 'default',
    showSortPutButton: true
  },
  columnConfig: {
    drag: true,
    resizable: true
  },
  columns: [
    { field: 'seq', type: 'seq', width: 90 },
    { field: 'name', title: 'Name' },
    { field: 'role', title: 'role' },
    { field: 'sex', title: 'Sex' },
    { field: 'age', title: 'Age' },
    { field: 'address', title: 'address' }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: 'Man', age: 28, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: 'Man', age: 32, address: 'Shanghai' },
    { id: 10004, name: 'Test4', role: 'Designer', sex: 'Women', age: 24, address: 'Shanghai' }
  ]
})
</script>

image

预期结果:打开工具栏的“自定义列”,调整列的显示、顺序、宽度、冻结状态,刷新页面后表格列状态与调整后一致。

全局配置方式

除了在单个表格的 customConfig 中配置,也可以通过 VxeUI.setConfig 全局指定默认存储方式:

import { VxeUI } from 'vxe-table'

VxeUI.setConfig({
  grid: {
    customConfig: {
      storeDriver: 'localStorage' // 全局默认使用 localStorage
    }
  }
})
  • 全局配置作为默认值,单表格 customConfig 中的配置优先级更高,可覆盖全局设置。
  • 适合整个项目统一存储策略,避免每个表格重复写 storeDriver。

IndexedDB 与 localStorage 如何选择?

存储方式容量读写性能适用场景
localStorage约 5MB同步读写,简单直接表格数量少、配置简单、需要快速读取
indexedDB数百 MB 以上异步读写,容量大表格数量多、配置项复杂、或需要存储较大结构
  • 默认推荐 indexedDB,容量更大,不会因表格数量多而触及 localStorage 上限。
  • 若项目对兼容性或调试便利性有要求,localStorage 更直观,可直接在浏览器开发者工具中查看键值。

storeOptions 支持保存哪些配置?

customConfig 的本地存储能力覆盖以下个性化项:

可保存项说明
列宽用户拖拽调整后的列宽
列排序用户拖拽调整后的列顺序
冻结列用户设置的左冻结 / 右冻结
显示隐藏用户勾选或取消勾选的列
聚合分组分组列头的展开 / 收起与分组结构
聚合函数表尾聚合相关配置

这些项只有在对应功能已启用时才会被记录。例如未开启 columnConfig.resizable,列宽调整不会被保存;未配置聚合相关能力,聚合项也无内容可存。

关键配置参数

配置项类型默认值说明
idString—表格唯一标识,个性化记忆的存储键,必须全局唯一
toolbarConfig.customBooleanfalse是否显示工具栏中的自定义列按钮
customConfig.storageBooleanfalse是否启用本地存储,开启后个性化设置才会持久化
customConfig.storeDriverString‘localStorage’存储方式,可选 ‘indexedDB’ / ‘localStorage’
customConfig.modeString‘default’自定义列面板模式
customConfig.showSortPutButtonBooleanfalse是否显示置顶 / 置底排序按钮
columnConfig.dragBooleanfalse是否允许拖拽调整列顺序
columnConfig.resizableBooleanfalse是否允许拖拽调整列宽

注意事项

  • id 与 field 的唯一性是成败关键
    • 个性化记忆以表格 id 为存储键,以列 field 为列标识。id 重复会让多个表格共享同一份配置;field 重复或缺失会导致某些列的设置无法恢复或错位。分组列头的父级列也需要一个唯一 field,不能只给叶子列设置。
  • 非数据列同样需要 field
    • type: ‘seq’、type: ‘checkbox’ 等列没有业务字段,但用于个性化记忆时仍需指定唯一 field。示例中 seq 列已显式设置 field: ‘seq’。
  • storage: true 是总开关
    • 仅设置 storeDriver 而不开启 storage,配置不会持久化。两者需同时配置。
  • 刷新后恢复依赖同一 id
    • 若页面重构时修改了表格 id,用户之前的个性化设置将无法被读取,表现为“设置丢失”。发布前应确认 id 稳定不变。
  • 多标签页与多用户场景
    • 本地存储按浏览器与域隔离。同一浏览器不同用户、不同设备之间不会同步。若需要跨设备同步,需将个性化配置提交到后端,而非仅依赖本地存储。
  • 清理策略
    • 用户调整列后旧配置会保留在 IndexedDB / localStorage 中。若业务允许“恢复默认列”,需在代码中清除对应 id 的存储记录,或提供重置按钮调用相关 API。

https://vxetable.cn

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/honkun6/article/details/169365875

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--