angularJS 简单合并单元格使用 ng-repeat-start 指令
梦想还是要有的,就算实现不了,但还有一段难忘的经历。
这不,今天在做单元格的合并,想了一上午,终于将该问题解决。解决思路便是使用 ng-rapeat-start 与 ng-rapeat-end 指令。
先上一张效果图:
首先,我们需要后台返回的数据是这样的,要求返回的数据是一个数组,而每一个数组里面包含了,合并的列以及一个数组,结构如下:
var data = [ { "nian": "一年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] }, { "nian": "二年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] }, { "nian": "三年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] } ];
其次,我们循环数据时,先循环出第一行记录,然后循环出该合并单元格的其他行记录,而我们的 html 是如下操作数据的:
<table ng-controller="repeatController" border="1"> <thead> <td>年级</td> <td>姓名</td> <td>年龄</td> </thead> <tbody> <tr ng-repeat-start="group in list"> <td rowspan="{{group.item.length}}">{{group.nian}}</td> <td>{{group.item[0].name}}</td> <td>{{group.item[0].age}}</td> </tr> <tr ng-repeat-end ng-repeat="single in group.item" ng-hide="$first"> <td>{{single.name}}</td> <td>{{single.age}}</td> </tr> </tbody> </table>
最后,附上所有的代码,以供参考:
<!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="https://cdn.bootcss.com/angular.js/1.6.4/angular.min.js"></script> </head> <body> <table ng-controller="repeatController" border="1"> <thead> <td>年级</td> <td>姓名</td> <td>年龄</td> </thead> <tbody> <tr ng-repeat-start="group in list"> <td rowspan="{{group.item.length}}">{{group.nian}}</td> <td>{{group.item[0].name}}</td> <td>{{group.item[0].age}}</td> </tr> <tr ng-repeat-end ng-repeat="single in group.item" ng-hide="$first"> <td>{{single.name}}</td> <td>{{single.age}}</td> </tr> </tbody> </table> <script> var data = [ { "nian": "一年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] }, { "nian": "二年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] }, { "nian": "三年级", "item": [ { "name": "张三", "age": "23" }, { "name": "张三", "age": "23" } ] } ]; repeatController = function ($scope){ $scope.list = data; } repeatController.$inject = ['$scope']; angular.module('myapp',[]).controller('repeatController',repeatController); </script> </body> </html>
注:angularJS合并单元格,还有一种方法,那就是使用循环指令中的 $index 属性,此种方法日后再说。而我们上面的方法是使用了 $first 属性。
1 条评论发表在 “angularJS 简单合并单元格使用 ng-repeat-start 指令”
斌哥,angular了,这个厉害了!