无论前端后端, 使用art-template模板,对程序员来说非常方便和节约时间成本,但art-template模板使用中也很多坑,只有亲自经历,才知道其中痛苦.下面聊一聊如何使用art-template模板,遍历一个number类型的数值:
实际应用场景: node 项目, 后端读取数据库的总数据,并在前端实现分页控制
比如: 在前端实现分页时,需要后端传过去一个数值类型的总页数, 如何在前端遍历渲染,就是一个头痛的问题, art-template官方文档无论标准语法还是原始语法, 都没有专门的对应方法., 这对初学者十分不友好! 在自己实际使用时,官方文档中没找到能直接对数值进行遍历的方法; 上网查也没看到针对性的有关介绍文章, (好多只是简单把art-template官方文档抄一遍放上去,真没什么价值), 最后只能通过把这个数值类型的数,在后端转换成数组,才能在前端的 art-template 模板中遍历使用;
解决方案:
第一步: 在后端,把这个分页的总数如 : totalPage, 先通过遍历,转换成一个数组---> totalPages;(注意这两个变量是不一样的)
先定义一个空数 组totalPages,然后遍历 totalPage ,把遍历后的每一个数, push() 到这个数组中;
第二步:后端把这个totalPages, 传递到前端,前端再使用art-template模板的标准语法,才能进行遍历处理;
第三步: 后端处理====>
代码示例:
<code> // 定义当前页,这个当前页就是客户端点出时发送过来的页码数,把它转换成 number 类型的十进制数值 const page = Number.parseInt(req.query.page, 10); // 定义每页的显示数 const pageSize = 5; // 操作数据库集合中的数据 PoemsOne.find() .skip((page - 1) * pageSize) .limit(pageSize) .exec((err, poemsones) => { if (err) { return next(err); } PoemsOne.countDocuments((err, count) => { if (err) { return next(err); } const totalPages = []; const totalPage = Math.ceil(count / pageSize); for (let i = 0; i < totalPage; i++) { totalPages.push(i); } 上面的就是在后端把Number 数值,转换成数组 res.render("poem.html", { poemsones, totalPages, page, }); }); }); </code>
第四步: 前端遍历处理: 这就简单了
代码示例:
<ul> {{each totalPages}} <!-- 判断当显示页等于当前页时, 当前页码获取焦点 --> {{if ($value + 1) === page}} <li class="active"><a href="/poem?page={{$value + 1}}">{{$value + 1}}</a></li> {{else}} <!-- 当不处于当前页码时,失去焦点 --> <li><a href="/poem?page={{$value + 1}}">{{$value + 1}}</a></li> {{/if}} {{/each }} </ul>通过以上步骤,最终解决的这个问题,
这个问题对于大神和资深程序员来说不值一提,但对于初学者,应该能提供点帮助.
