page.limits数组控制下拉选项,必须是长度≥2的纯数字数组,且page.limit值须在其中;request.limitName用于指定接口参数名;动态修改limits只能通过destroy+render实现。

page.limits 数组控制下拉选项,不是 request.limit
很多人以为改 request.limitName 或只设 page.limit 就能影响分页下拉菜单,其实完全没用。真正决定「下拉框里显示哪些数字」的,只有 page.limits 这个数组,而且它必须满足三个条件:
-
page.limits必须是纯数字数组,比如[10, 20, 50, 100],不能含字符串、null或undefined - 数组长度必须 ≥ 2,否则不渲染可展开下拉(
[10]会生成一个不可点的假输入框;[]才彻底隐藏) -
page.limit的值必须在page.limits中存在,否则 UI 静默 fallback 到第一个值,且页码文案可能错乱
例如后端接口要求参数名是 pageSize,那还得配 request: { limitName: 'pageSize' },否则请求发的是 limit=20,后端收不到。
limit 和 limits 必须同时写在 page 对象里
常见错误是把 limit 写在 table.render() 的顶层配置,或者只写 page: true 就完事。Layui 不认这种写法 —— limit 和 limits 都得显式放在 page 子对象内,首次渲染才生效:
table.render({
elem: '#demo',
url: '/api/list',
page: {
limit: 20,
limits: [10, 20, 50, 100]
},
request: {
limitName: 'pageSize'
}
});
漏掉 limits,下拉菜单还是默认的 [10, 20, 30, 40, 50];漏掉 limit,哪怕 limits 有值,首次加载仍按默认 30 条走。
想改页码连续显示个数?别碰 table.page,用 laypage.render
table.render() 的 page 配置里根本没有 groups 字段。这个参数属于底层分页组件 laypage,控制「… 6 7 8 9 10 …」中间连续显示几个页码。要自定义它,必须手动接管分页:
- 先设
page: false关闭 table 自动分页,否则 DOM 重复、事件冲突 - 调用
laypage.render(),显式传入groups: 3(或你想要的数字) -
count值不能为0或undefined,否则groups失效,退化成简版分页 - 每次数据变更(如搜索、筛选)后,必须重新执行
laypage.render(),否则页码栏不刷新
翻页时需在 jump 回调里调 table.reload(),并同步传 page: { curr: obj.curr } 和 where: { page: obj.curr },否则页码状态和表格数据不同步。
动态换 limits 选项?只能 destroy + render,reload 不行
table.reload() 传新 limits 完全无效 —— DOM 不更新、内部状态不重置、点击新选项可能发旧值。唯一可靠方式是销毁重建:
- 先调
table.destroy('demo'),参数必须是表格容器的id或lay-id,否则销毁失败 - 清空容器内非表格 DOM(比如自定义按钮、提示文字),避免残留节点干扰样式
- 用完整新配置重新
table.render(),包括cols、url、request等,漏一项就变空白 - 原表格若有排序、搜索等状态,需手动保存并在新 render 中还原
移动端建议 limits 不超过 4 个选项,太多容易弹层溢出视口,用户点不到最末项。


















