1)按主题
分组数据首先,你需要按subject
的数据,然后计算每个组中的项目。
您可以使用angular.filter模块的groupBy过滤器来执行此操作。
1A)添加一个模块的依赖关系如下:
var app = angular.module("yourModuleName", ["angular.filter"]);
1B)然后,您可以使用groupBy
过滤器在ng-repeat
指令在<tbody>
标签是这样的:
<tbody ng-repeat="(key, value) in data | groupBy: 'subject'">
1c)您现在正在处理以下格式的数据。这是key
/value
对其中"maths"
和"history"
均为keys
的对象,并且该阵列是values
{
"maths": [
{
"rollno": 1,
"name": "abc",
"subject": "maths",
}
],
"history": [
{
"rollno": 4,
"name": "xyz",
"subject": "history",
},
{
"rollno": 2,
"name": "pqr",
"subject": "history",
}
]
}
2)显示已分组的数据,并且每个组
使用在计数的项目key
和value
以如下方式显示分组数据:
<table>
<thead>
<tr>
<th>Subject</th>
<th>Number of Students</th>
<th>Expand/Collapse</th>
</tr>
</thead>
<tbody ng-repeat="(key, value) in data | groupBy: 'subject'">
<tr>
<td>{{ key }}</td>
<td>{{ value.length }}</td>
<td>
<button>
Expand/Collapse
</button>
</td>
</tr>
<tr>
<td colspan="3">
<table>
<thead>
<tr>
<th>Roll Number</th>
<th>Name</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="student in value">
<td>{{ student.rollno }}</td>
<td>{{ student.name }}</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
注意额外<tr>
和嵌套表与另一ng-repeat
显示学生数据。当前将显示所有嵌套的学生数据,下一步是根据点击哪个展开/折叠按钮来有条件地显示/隐藏嵌套表格。
3)显示/隐藏嵌套的学生数据
3A)上的按钮,使之穿过key
到onExpandClicked
功能添加ng-click
指令控制器上:
<button ng-click="onExpandClicked(key)">
Expand/Collapse
</button>
3b)在您的控制器中创建onExpandClicked
功能:
$scope.onExpandClicked = function(name){
$scope.expanded = ($scope.expanded !== name) ? name : "";
}
这设置$scope
上的一个值,该值可用于视图中以决定是否显示/隐藏学生数据的一部分。所述key
被传递到函数作为name
参数和$scope.expanded
要么被设定为name
或复位为""
根据是否通过了name
相同电流值$scope.expanded
与否。
3C)最后,使用$scope.expanded
变量在ng-if
指令上的<tbody>
第二<tr>
标签以显示或隐藏嵌套学生数据:
<table>
<thead>
<tr>
<!-- Omitted for brevity -->
</tr>
</thead>
<tbody ng-repeat="(key, value) in data | groupBy: 'subject'">
<tr>
<!-- Omitted for brevity -->
</tr>
<tr ng-if="expanded === key">
<!--
Omitted for brevity
-->
</tr>
</tbody>
</table>
演示
CodePen: How to show/hide grouped data created by the angular.filter module's groupBy filter
谢谢,这工作! –