loading是布尔值开关,仅控制是否显示默认加载层;改图标文字需用layer.load()手动接管或CSS覆盖,但后者有兼容性和动态性缺陷。
layui table 的 loading 配置项到底怎么用
直接说结论:loading 是个布尔值开关,不是用来设图标或文字的——它只控制「是否显示默认加载层」。想改图标和文字,得绕开这个配置,走 dom 操作或 css 覆盖。
很多人试过在 render() 里写 loading: { text: '加载中...' },结果完全没反应,就是因为 layui 2.x 的 table 模块压根不认这种写法。官方文档里那个 loading 示例,其实属于 layer.load(),被误抄进表格说明里了。
-
loading: true→ 显示默认灰色半透明遮罩 + 小圆圈动画(无文字) -
loading: false→ 完全不显示任何加载态,表格空白等数据 - 没有
loading: { icon: '...', text: '...' }这种合法结构
用 done 回调 + layer.load() 手动接管加载态
这是最可控、兼容性最好的做法:关掉表格自带加载层,自己用 layer.load() 控制样式和文案,再在 done 里关闭。
注意两点:一是必须把 loading: false 显式写上;二是 layer.load() 返回的索引要存好,不然关不掉。
table.render({
elem: '#demo',
url: '/api/list',
loading: false,
done: function(res, curr, count) {
// 加载完成,关闭 layer.load()
if (this.loadIndex) {
layer.close(this.loadIndex);
this.loadIndex = null;
}
},
request: {
pageName: 'page',
limitName: 'limit'
},
parseData: function(res) {
// 请求发出前手动打开加载层
if (!this.loadIndex) {
this.loadIndex = layer.load(1, {
content: '<i class="layui-icon layui-icon-loading"></i> 正在加载...',
time: 0
});
}
return {
code: res.code,
msg: res.msg,
count: res.total,
data: res.data
};
}
});
纯 CSS 覆盖默认加载图标的局限性
有人想偷懒,直接用 CSS 改 .layui-table-view .layui-table-load 里的内容,比如加伪元素写文字、换背景图。这能生效,但有硬伤:
- 图标是内联 SVG,不是 class 可控的,
::before很难精准替换动画部分 - 文字只能靠
content插入,但无法动态绑定语言或状态(比如“加载第 2 页…”) - layui 2.8+ 对加载层结构微调过,CSS 选择器容易失效
- 移动端下遮罩层级可能被弹层盖住,需要额外调
z-index
为什么不用 initSort 或 where 触发加载态
这两个参数跟加载态无关:initSort 只影响表头排序图标初始状态;where 是请求参数,不触发重载。真正触发加载的只有:table.reload()、分页切换、或首次 render()。
常见误区是以为改了 where 就会自动 show loading——不会。reload 时如果没设 loading: true,也不会显示。所以手动接管才是唯一稳的路。
复杂点在于:reload 时要避免重复调 layer.load(),得靠闭包变量或实例属性存状态;另外服务端报错时,done 不执行,得在 error 回调里也补一层 layer.close() ——这点很容易漏。











