视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用angularJsng-repeat做表格合并行效果
2020-11-27 19:33:59 责编:小采
文档
 这篇文章主要介绍了关于使用angularJs ng-repeat做表格合并行效果,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

描述

  • 使用angularJs做出表格合并的效果

  • 后端返回的数据

  •  [
     {"fileName":"111.pcap.00","startTime":"2018-06-05 10:16:04","taskName":"111","taskId":58,"fileId":72},
     {"fileName":"111.pcap.01","startTime":"2018-06-05 10:16:55","taskName":"111","taskId":58,"fileId":73},
     {"fileName":"aaa.pcap.00","startTime":"2018-06-05 10:10:28","taskName":"aaa","taskId":57,"fileId":71},
     {"fileName":"www.pcap.00","startTime":"2018-06-05 10:50:28","taskName":"www","taskId":59,"fileId":79}
     ]

    背景:

    为了能更直观的查看表格中相同的taskName所包含的数据,合并列名为taskName且值相等的行,期望效果如下图:

    分析:

    首先看后端返回的数据,是个一维数组,直接使用ng-repeat遍历行(tr)得到的是一个不带合并效果的表格,如图:

    怎么解决呢?想到的一种方案就是把taskName相同的数据合并成一条,再进行遍历。

    实现方案

  • 首先对原始数据进行处理,在我这里是把taskName相同的,合并成一条数据,重新处理以后的数据如下:

  • [
     {"taskName":"111","fileList":[{"fileName":"111.pcap.00","startTime":"2018-06-05 10:16:04","taskName":"111","taskId":58,"fileId":72},{"fileName":"111.pcap.01","startTime":"2018-06-05 10:16:55","taskName":"111","taskId":58,"fileId":73}]},
     {"taskName":"aaa","fileList":[{"fileName":"aaa.pcap.00","startTime":"2018-06-05 10:10:28","taskName":"aaa","taskId":57,"fileId":71}]},
     {"taskName":"www","fileList":[{"fileName":"www.pcap.00","startTime":"2018-06-05 10:50:28","taskName":"www","taskId":59,"fileId":79}]}
    ]

    重新构造的方法如下,数组list便是处理的结果,只需要把list赋值给$scope变量便可在页面上使用

     var list = [];
     angular.forEach(sourceData,function (item) {
     for(var i=0;i<list.length;i++){
     if(list[i].taskName === item.taskName){
     list[i].fileList.push(item);
     return;
     }
     }
     list.push({
     taskName:item.taskName,
     fileList:[item]
     });
     });
  • 现在看html这里,如果仍然在<tr>上进行ng-repeat,得不到预期效果。需要在上一层也就是<tbody>上遍历,因为每条数据都包含字段taskName,在做合并时只需要保留一个,使用ng-if='$index==0'控制。

  •  <tbody ng-repeat="file in tableData">
     <tr ng-repeat="item in file.fileList">
     <td ng-if="$index ==0" rowspan="{{file.fileList.length}}">{{file.taskName}}</td>
     <td>{{item.fileName}}</td>
     <td>{{item.startTime}}</td>
     <td class="table-col-operate">
     <span>
     <a ng-click="capture.download(item.fileId)">下载</a>
     <span class="text-red " ng-click="capture.deleteCapture(item)">删除</span>
     </span>
     </td>
     </tr>
     </tbody>

    总结

    在写重新构造原数组的方法时遇到问题,写的比较复杂,后来经过同事的点播,使用了现在比较简洁的方式。
    另外,实现的方式不只一种,我也试了其他的,都没有这个简单。

    下载本文
    显示全文
    专题