layui前端分页需手动实现全部逻辑:传全量data后,监听page/limit事件,用slice切片,显式设置page对象(含count、limit、curr等),每次分页或搜索排序后必须调table.render()重绘,字段名须与cols中field严格一致。

Layui 表格没有“前端自动分页”这回事——它从不替你切数据、算总条数、重置当前页,所有逻辑必须手动写死。所谓“自动”,其实是你把全量 data 传进去后,自己监听事件、自己切片、自己调 table.render() 重绘。
page: true 在前端模式下完全无效
写了 page: true 却没分页栏?因为你用了 data 数组。Layui 一检测到 data 字段存在,就强制进入前端模式,此时 page 必须是对象,true 被直接忽略,连 layout 都不渲染。
-
page必须写成对象,例如:{ layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'], count: allData.length, limit: 10, curr: 1 } -
count必须显式赋值为全量数组长度,不能留空、不能用undefined或null - 如果
data是空数组或未定义,控制台会报错:Cannot read property 'length' of undefined
每次翻页都得重新 render,不是 reload
table.reload() 在前端模式下行为不可靠:可能丢 count、残留旧 url、不更新页码显示。唯一稳定的方式是每次分页都调用完整的 table.render(),并传入新切片的 data 和完整 page 对象。
- 切片用原生
Array.prototype.slice(start, end),别手误写成splice -
start = (curr - 1) * limit,end = start + limit;slice()自动截断越界,安全 - 监听事件必须同时处理:
layui.table.on('page(demo)', ...)和layui.table.on('limit(demo)', ...) -
limit改变时,curr可能越界(比如原 15 页,limit 从 10 改成 50,当前页 15 就超了),需手动校准
搜索/排序后必须重置 curr = 1 并重 render
前端分页本身不联动搜索和排序。你对 allData 过滤或 sort() 得到新数组后,如果不重 render,表格仍显示旧切片;如果只改 data 不重置 curr,很可能显示空白页(比如新数组只剩 2 页,但 curr 还是 15)。
- 务必在搜索/排序后执行:
curr = 1,再调renderTable(1) - 新
data数组的每个对象字段名,必须和cols中的field完全一致(大小写敏感),否则单元格为空 - 不要在
render()外维护 table 实例再调reload()——它不会帮你重新计算分页上下文
最易被忽略的是:前端分页不是配置开关,而是你接管全部数据流——切片、计数、页码同步、字段映射、事件响应,每一环都得自己写,Layui 只画 UI、发事件,不代劳任何逻辑。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











