Layui表格field不支持点号路径,必须用parseData预处理或templet渲染。因field仅识别一级键名,深层字段需手动扁平化,否则渲染为空或[object Object]。
直接用 field 写 user.info.name 是无效的——layui 表格不解析点号路径,必须手动扁平化或用 templet 渲染。
为什么 field: 'user.info.name' 渲染不出数据
Layui 的列映射逻辑只认一级键名,field 不支持路径表达式。即使后端返回的是 {user: {info: {name: '张三'}}},表格内部仍会尝试读取 item['user.info.name'],结果是 undefined。
- 常见错误现象:列显示为空、
[object Object],控制台无报错 -
templet函数里能访问整行原始数据(参数d),但field本身必须对应最终对象上的一个可枚举属性名 - 排序、筛选功能依赖
field对应的值存在且为基本类型,不能靠templet补救
用 parseData 预处理嵌套结构
在 table.render() 配置中加 parseData,把深层字段提前解出来,生成纯平对象数组。
- 确保
return的data是Array.isArray(),且每项都是 plain object(不能带原型、不能是Map或Set) - 别直接修改原始
res,比如res.data.list[i].user = {...},否则可能污染缓存或影响其他模块 - 用可选链
item.user?.info?.name避免Cannot read property 'info' of undefined - 示例:
parseData: function(res){
return {
"code": res.code,
"msg": res.msg,
"count": res.data.total,
"data": res.data.list.map(function(item){
return {
id: item.id,
name: item.user?.info?.name || '-',
age: item.user?.info?.age || 0,
status: item.status
};
})
};
}
用 templet 快速展示单列嵌套值
适合只有一两列需要取深层字段,且不需要排序/筛选的场景,比 parseData 更轻量。
- 模板字符串写法:
templet: '<div>{{d.user?.info?.name}}</div>' - 函数写法更可控:
templet: function(d){ return d.user?.info?.name || '-'; } - 不要在
templet里做异步请求、复杂计算或 DOM 操作,会阻塞表格渲染 - 如果该列要支持排序,
field仍需存在且指向一个真实字段(哪怕只是占位)
改 table.js 源码适配多层响应结构(慎用)
当接口固定返回 res.data.list 和 res.data.total,且你无法改后端、又不想每次写 parseData,可本地覆盖 table.js。
- 搜索
res[response.countName]→ 替换为res.data.total - 搜索
res[options.response.dataName]→ 替换为res.data.list - 注意:升级 Layui 版本时需重新打补丁;多人协作项目中容易遗漏同步
- 推荐仅用于老旧系统维护,新项目优先走
parseData或推动后端返回扁平结构
真正麻烦的不是怎么取值,而是嵌套层级深 + 数据量大时,parseData 里的 map 解构会明显拖慢首屏。万级数据建议后端直接展平,前端只负责渲染。


















