layui table 的 templet 怎么写才能正确格式化数字

直接在列配置里用 templet 返回格式化后的字符串,别碰 format 或其他非官方字段。layui 的表格列不内置金额/百分比解析逻辑,所有格式化必须手动做。

常见错误是把 templet 写成字符串模板(比如 "{{d.price | money}}"),但 Layui 2.x 不支持管道符语法;3.x 虽支持 templet: ‘#moneyTpl’,但模板引擎仍不带内置过滤器,得自己定义。

推荐写法:用函数形式的 templet,直接对 d 对象做处理金额建议保留两位小数,用 Number(val).toFixed(2),别用 parseFloat + toLocaleString 混用,容易出千分位兼容问题百分比字段注意原始值是 0.87 还是 87 —— 大多数后端返回的是小数,需乘 100 后加 %

金额格式化时为什么出现 “NaN” 或 “undefined”

根本原因是 templet 函数里取的字段名和实际返回数据结构对不上,比如后端返回 amount,你写了 d.money,结果 d.money 是 undefined,再调 .toFixed() 就崩了。

务必先检查 console.log(d) 看清真实字段名加空值防护:typeof d.price === ‘number’ ? d.price.toFixed(2) : ‘-‘ 避免直接写 d.price.toFixed(2) —— 如果后端可能返回字符串(如 "1234.5"),先转 Number(d.price)Layui 渲染时会反复调用 templet,别在里面发请求或做耗时操作

百分比列渲染后点击排序错乱怎么办

因为 templet 只改显示,没动原始值,排序还是按原始数字(比如 0.87)排的,但用户看到的是 “87.00%”,视觉上觉得顺序怪。

解决方法一(推荐):列配置加 sort: true,同时确保 data 里的该字段是数字类型(不是字符串 “87%”),这样排序逻辑正常,显示靠 templet解决方法二:用 unresize: true 关掉该列排序,适合纯展示字段别试图在 templet 里返回带单位的数字再让 Layui 排序 —— 它不会自动提取数值,一定会按字符串排,导致 100%

用 layui.use([‘table’, ‘util’]) 能简化格式化吗

不能。Layui 的 util 模块没有提供数字格式化方法,util.toDateString 只处理时间,util.escape 只转义 HTML,别白费劲找不存在的 API。

真想复用逻辑,就自己封装一个格式化函数:

const fmt = { money: v => typeof v === ‘number’ ? `¥${v.toFixed(2)}` : ‘-‘, percent: v => typeof v === ‘number’ ? `${(v * 100).toFixed(2)}%` : ‘-‘};

然后在每列 templet 里调 fmt.money(d.price) 或 fmt.percent(d.rate) —— 简单、可控、不依赖未声明行为。

复杂点在于后端字段语义不统一:同一份接口里可能有的金额带符号、有的是字符串、有的为空对象;这些边界情况不提前 guard,上线后第一笔财务数据就容易挂掉。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。