应使用table.cache['yourtableid']获取当前页原始数据,但仅限本地data渲染;若为远程url分页,则cache仅存当前页响应数据,需在done回调后读取,否则可能为空。
直接读 table.cache['yourtableid'],但必须确认你用的是本地数据渲染(data 参数传入),否则它只存当前页。
为什么 getData() 不总可靠
table.getData('demo') 看似最直觉,但它返回的是「经过过滤、排序、搜索后当前可见的行」,不是原始输入数据。比如你加了 where 搜索条件或前端 filter,它就只返回匹配项;如果你没开分页但用了远程 url,它甚至可能返回空数组。
- 适用场景:仅当你需要「当前界面实际展示的数据快照」时才用
- 风险点:和初始化传入的原始数据字段不一致(比如多了
layTableIndex、LAY_CHECKED等内部字段) - 性能影响:无额外开销,但语义上不是「原始数据」
table.cache 怎么用才拿到原始数据
table.cache['demo'] 存的是你调用 table.render() 时通过 data 参数传进去的整个数组——前提是没配 url。一旦用了 url 异步加载,cache 就只缓存当前页响应体里的 data 字段内容,不是全量。
- 正确写法:
var originalData = table.cache['demo'] || []; - 必须在
done回调之后读取,否则可能还是undefined - 如果表格是分页+远程加载,且你需要全部原始数据,得自己在请求成功后把服务端返回的完整列表存到全局变量里,别依赖
cache
远程分页场景下怎么安全拿全量原始数据
没有银弹。Layui 的 table 模块本身不维护全量缓存,cache 是按页切片的。所以你得主动接管数据生命周期。
- 方案一:在
url请求的success回调里,把服务端返回的完整数据数组(比如res.data.list)赋给一个全局变量,如window.allTableData = res.data.list; - 方案二:改用
data渲染 + 手动分页逻辑,把全量数据一次性拉下来,由前端控制显示范围 - 容易踩的坑:监听
page事件后去重新请求全量?别这么做——既浪费带宽,又破坏用户已有勾选状态
真正麻烦的不是「怎么取」,而是你得先想清楚:这个「所有原始数据」是用来干啥的?导出?二次筛选?还是生成统计图表?不同用途对应不同获取时机和存储方式,硬套 cache 或 getData 往往绕远路。











