layui表格空状态提示仅通过顶层text: {none: 'xxx'}生效,且需后端count为0或data为空;其他方式均无效,自定义内容须在done回调中操作dom。

text: {none: 'xxx'} 是唯一合法配置项
直接改 emptyText 或在 cols 里写 text: 'xxx' 都无效。Layui 只认顶层参数中的 text: {none: '暂无数据'},且必须是对象,不是字符串。
这个配置只在整张表完全为空时生效:后端返回的 count === 0(分页场景)或 res.data.length === 0(前端分页),二者缺一不可。
-
text: {none: '暂无数据'}✅ 正确,位置在table.render()的第一层参数中 -
text: '暂无数据'❌ 错误,会静默失效,部分版本导致列内容变undefined -
emptyText: '暂无数据'❌ 会被layui.util.escape()转义,HTML 标签原样显示 - 把
text塞进response或parseData里 ❌ 完全读不到
为什么写了 text.none 还不显示?检查 count 字段
开了 page: true 后,Layui 不看 data 是否为空,只认 count。哪怕接口返回 {"data": [], "count": 100},表格照样渲染空行,不触发提示。
常见错误场景:
- 后端返回字段名不是
count(比如叫total、records),但没配response.countName -
parseData返回对象漏了count字段,或值为null/undefined - 用了
initSort,Layui 2.8+ 存在兼容性问题,可能导致空状态判断跳过(此时需手动在done中补判断)
想换图标或加按钮?别动 text,用 done 回调重写 DOM
text.none 只能改文字,所有 HTML、图标、按钮都得靠 done 回调手动注入。因为 .layui-table-empty 容器每次 table.reload() 或搜索后都会重建,必须每次重新写入。
正确做法:
- 在
done里判断if (count === 0)(分页)或if (res.data.length === 0)(前端分页) - 用
document.querySelector('.layui-table-empty')找到容器 -
emptyEl.innerHTML = '你的 HTML',并清掉内联样式:emptyEl.style.cssText = '' - 如果用了自定义图标字体,记得加
font-family: "layui-icon" !important,否则不生效
示例:
done: function(res, curr, count) {
if (count === 0) {
const emptyEl = document.querySelector('.layui-table-empty');
if (emptyEl) {
emptyEl.innerHTML = '<div style="text-align:center;padding:30px 0;">
<i class="layui-icon layui-icon-face-smile" style="font-size:28px;color:#1677ff"></i><p style="margin:12px 0 0;color:#666">暂无数据</p>
</div>';
emptyEl.style.cssText = '';
}
}
}
单元格里显示的“—”和 text.none 完全无关
表格某列数据为 null、undefined 或空字符串时,默认显示 “—”,这是底层 fallback 行为,text 配置项对它不起作用。
要统一替换“—”为其他符号(如 - 或 /),必须每列显式加 templet:
templet: d => d.fieldName != null ? d.fieldName : '-'- 注意数字
0会被||误判,推荐用!= null或typeof d.fieldName !== 'undefined' - 如果字段可能为
0、false、'',又想保留原值,就得写更细的判断逻辑
这个细节最容易被忽略:以为改了 text.none 就一劳永逸,结果发现满屏“—”还是照常出现。











