layui 2.8 不支持真正的全局配置,所有版本均无类似 layui.table.setdefaults() 的接口;必须在每个 table.render() 中显式配置 request 对象,且 pagename 默认值已从 page 改为 curr。
layui 2.8 不支持真正的「全局配置」pagename/limitname
直接说结论:layui 所有版本(包括 2.8)都**没有提供类似 layui.table.setdefaults() 的全局参数映射接口**。所谓“全局配置”,实际只能靠在每个 table.render() 调用中重复写 request 配置,或封装一个初始化函数来统一注入。
必须在每个 table.render() 中显式声明 request
你不能只写一次就让所有表格生效。漏掉任意一个表格的 request,它就会按默认名 page 和 limit 发请求,后端收不到 pageNum/pageSize 就会返回全量数据。
-
request必须是对象,且字段名严格区分大小写:pageName≠pagename - 常见后端习惯名:Spring Boot 用
pageNum/pageSize,ThinkPHP 用page/listrows,Flask 可能用page_no/per_page - 若后端参数名是
size而非pageSize,就得写limitName: 'size',而不是去改后端 - 不配
request时,layui会静默使用默认值,Network 面板里看到的是?page=1&limit=10,但后端根本没这个字段——这正是分页“失效”的最常见原因
用封装函数模拟“全局配置”效果
如果你有多个表格,又不想每处都手写 request: { pageName: 'pageNum', limitName: 'pageSize' },可以这样封装:
const defaultTableConfig = {
request: {
pageName: 'pageNum',
limitName: 'pageSize'
},
response: {
countName: 'count',
dataName: 'data'
}
};
<p>// 使用时
table.render(Object.assign({
elem: '#demo',
url: '/api/list',
page: true,
limit: 20,
cols: [[/<em> 列定义 </em>/]]
}, defaultTableConfig));
</p>
注意:Object.assign 是浅合并,如果某处需要覆盖 pageName,得写成 Object.assign({ request: { pageName: 'current' } }, defaultTableConfig),否则会被覆盖掉。
2.8 版本特别注意:pageName 默认值已从 page 改为 curr
这是 2.7 升级到 2.8 最容易踩的坑。2.7 默认发 page=1,2.8 默认发 curr=1。如果你没配 request.pageName,而接口还只认 page,请求就带不上正确参数。
- 验证方法:打开 Network 面板,看翻页请求 URL 中的参数名到底是
curr还是page - 兼容写法(推荐):
request: { pageName: 'page', limitName: 'pageSize' },明确锁定,不依赖版本默认行为 - 别信文档里“默认兼容旧版”的说法——实际测试中,2.8 对未声明
pageName的表格,确实发curr
真正麻烦的不是配不配,而是配了之后没人检查 Network 请求是否真带上了你写的那个字段名。只要 URL 里没出现 pageNum=1,其他所有配置都是白搭。











