Layui表格分页需同时配置page.limit(正整数)、page.limits(含limit值的≥2项数字数组)及request.limitName(匹配后端参数名),三者缺一不可;动态修改须用table.reload()传完整page对象,切换limits则必须destroy后render。

直接在 table.render() 的 page 配置里写 limit: 15,不是改 CSS、不是调 API、不是靠后端传——这个值必须是正整数,且必须出现在首次渲染的 page 对象里,否则默认还是 30 条。
page.limit 必须和 page.limits 同时存在才生效
很多人只写 limits: [10, 20, 50],却漏了 limit: 20,结果首次加载仍是默认 30 条。Layui 不会从 limits 数组里“猜”你想要哪个值作为初始条数。
-
limit决定当前显示多少条,必须是正整数(不能是字符串"20"或小数20.0) -
limits是纯数字数组,长度 ≥ 2 才渲染可展开下拉框,例如[5, 10, 20, 50] -
limit的值必须在limits数组中存在,否则 UI 静默 fallback 到第一个值(比如limits: [8, 16, 32]但limit: 15,实际生效的是 8) - 别写
page: true简写——它不带limit和limits,等于没配
后端参数名不是 limit?得同步配 request.limitName
如果后端接口接收的是 pageSize 而非 limit,光改前端 limit 没用:请求发出去的仍是 ?page=1&limit=15,后端收不到 pageSize=15,数据永远不对。
- 必须加
request: { limitName: 'pageSize' } - 同时确保
pageName也匹配(如后端要pageNum,就得配pageName: 'pageNum') - 不配
request时,Layui 默认发page和limit,这是硬编码逻辑,无法绕过
动态改每页条数,用 table.reload() 就够了
用户点下拉切换条数后,Layui 自动触发重载;你自己想改,比如从 15 条切到 50 条,不用销毁重建表格,table.reload() 是专为此设计的。
- 调用时必须传完整
page配置:table.reload('demo', { page: { limit: 50 } }) - 只传
{ limit: 50 }不行,page对象不能省 -
table.destroy()+table.render()是过度操作:会丢页码、排序、事件绑定,还可能残留 DOM - reload 不影响当前页码,除非你显式传
page: { curr: 1, limit: 50 }
想换下拉选项?只能 destroy + render
table.reload() 传新 limits 完全无效——下拉菜单 DOM 和内部状态不会更新,点新选项可能发旧值或无响应。
- 正确做法:先
table.destroy('demo')(参数必须是容器的id或lay-id) - 清空容器内非表格 DOM(比如自定义按钮、提示文字),避免样式干扰
- 再用完整新配置调
table.render(),漏掉cols、url或request会导致表格空白 - 原表格如有搜索、排序状态,需手动保存并在新 render 中还原
真正难的不是写对配置,而是记住三者分工:limits 控制「能选什么」,limit 决定「当前选哪个」,request.limitName 决定「后端能不能收到」——缺一,UI 和接口就对不上。











