本文介绍在 art-template 模板引擎中使用过滤器解决 HTML 渲染中小数精度丢失问题,以及处理单个和多个参数过滤器的具体语法。通过注册全局过滤器函数,可在模板中直接调用如 toFixed 等方法进行数据格式化,并支持多值处理的复杂逻辑。
在 art-template 模板引擎中,过滤器是一个重要的功能模块。
HTML 渲染存在一个常见现象:部分小数在显示时可能转化为无限循环小数。
例如数值 1.05,在特定情况下可能显示为 1.049999999999……
在 JavaScript 原生开发中,可以通过调用 .toFixed(value) 等方法实现四舍五入,从而保留指定的小数位数。
然而,art-template 模板在渲染过程中,不支持在模板语法中直接调用 JavaScript 方法。
为了解决这一问题,需要借助 art-template 提供的过滤器功能。
其基本语法结构如下:
<!--HTML-->
<script type="text/html" id="template">
{{date|过滤器名称}}
</script> template.defaults.imports.过滤器名称 = function(date){
处理内容
return 处理结果
};具体示例如下
<div class="box"></div>
<script type="text/html" id="template">
<div class="total-price">
{{list.unit-price*list.num|format}} 元
</div>
</script> render(data){
// art-template过滤器
template.defaults.imports.format = function(n){
return n.toFixed(2);
};
// art-template模板渲染
$(".box").html(template('template',{list:data}));
}效果对比
未处理时的原始显示:

应用过滤器后的显示效果:

需要注意的是,定义的过滤器函数必须包含一个返回值。
此外,过滤器还支持其他多种写法形式。
art-template 过滤器支持单值与多值处理
art-template 过滤器详解
参考链接: 官方文档-过滤器语法
处理单个值的过滤器
HTML:<p>共有{{popWindow_val.freeFriend | friendNum}}位好友</p>JS: template.defaults.imports.friendNum = function (value) {
var length = value.length;
return length;
}处理多个值的过滤器
HTML:{{$imports.pkWord(pkList_val.freeTeam,pkList_val.zan)}}JS:template.defaults.imports.pkWord = function (value,zan) {
for (var i = 0, len = value.length; i < len; i++) {
if (value[i].status == 2 || value[i].status == 3) {
return "小组中已有人集齐点赞,赶紧分享好友,完成时间最短即可免单。";
}
}
var word = 'PK已发起,请在24小时内集齐' + zan + '个赞,小组内完成集赞耗时最短者即可免单。'
return word;
}以上为个人经验总结,希望能为大家提供参考,也希望大家多多支持本站。