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
謝謝,這工作! –