layui table 的 layout 无直接控制连续页码个数的配置,该逻辑由底层 laypage 的 groups 参数决定,默认值为5;需禁用 table 自动分页(page: false),手动调用 laypage.render() 并设置 groups 即可生效。
layui table 的 layout 里没有直接控制“连续页码个数”的配置项
这是很多人搜到就懵的原因:layui 官方文档没提,page 配置里的 limits 控制每页条数,limit 是默认值,但页码栏显示几个数字(比如 1 2 3 … 10)——这个逻辑压根不归 table 或 page 配置管,而是由内置的分页组件 laypage 决定的,且只在「非简版」模式下生效。
你用的是 table.render(),但它的分页底层调用的是 laypage.render(),而 laypage 的页码折叠策略(即显示多少个连续页码、何时出现省略号)由 groups 参数控制。
-
groups默认值是5,也就是最多连续显示 5 个页码(如:… 7 8 9 10 11 …) - 这个参数不能通过
table.render()的page对象透传,必须手动接管分页渲染 - 一旦你手动调用
laypage.render(),就要关掉 table 自带的分页(设page: false),否则会冲突
如何用 laypage.render() 替换 table 默认分页并设置 groups
核心思路:禁用 table 自动分页 → 手动请求数据 → 用 laypage.render() 渲染页码栏 → 点击页码时重新加载表格数据。
- 在
table.render()中设置page: false,同时保留elem和cols,让表格只负责展示 - 用
table.reload()触发数据重载,把当前页码curr作为参数传给后端 - 在
laypage.render()的jump回调里调用table.reload(),并把curr注入where - 关键:在
laypage.render()配置中显式写上groups: 3(或你需要的数字)
laypage.render({
elem: 'pageDemo',
count: total, // 总数,需你自己从接口或初始数据里拿到
curr: 1,
groups: 3, // ✅ 这里控制连续页码个数(如设为 3,则显示 … 4 5 6 …)
jump: function(obj){
table.reload('demo', {
where: { page: obj.curr },
page: { curr: obj.curr }
});
}
});
为什么改了 groups 有时没反应?常见踩坑点
最常被忽略的是:table 默认分页和 laypage 手动分页共存,导致 DOM 重复、事件绑定错乱、groups 被忽略。
- 没关掉 table 的自动分页:确认
page配置不是true或对象里没漏掉page: false -
count值为0或undefined:laypage 会退化为简版(只显示上一页/下一页),此时groups失效 - 后端返回的总条数
total没动态更新:比如搜索后总数变了,但laypage.render()没重新执行,页码栏不会刷新 - 用了
skin或theme但没适配自定义结构:laypage 的 DOM 结构变了,可能影响样式定位,但不影响groups逻辑
进阶:想让页码栏支持「首页/末页」+ 自定义 groups
laypage 默认不显示首页/末页按钮,得靠 first 和 last 配置项开启,它们和 groups 完全兼容。
-
first: '首页'或first: true(显示“首页”文字) -
last: '尾页'或last: true(显示“尾页”文字) - 这两个参数不影响
groups计算,只是追加前后按钮,比如groups: 3+first: true会显示:首页 1 … 4 5 6 … 尾页 - 注意:如果总页数 ≤
groups,就不会出现省略号,所有页码平铺显示
真正复杂的地方在于,你要维护两套状态同步:table 的数据、laypage 的当前页、后端返回的总条数。尤其做搜索、筛选时,每次都要重置 laypage.render() 并传入新 count,不然页码栏就卡死在旧总数上。











