Как я могу подобрать сортировку таблицы в angularjs, когда мои данные вложены, а не все столбцы являются гражданами первого уровня объектов.Сортировка таблицы AngularJs, когда данные вложены
данных (выдержка)
[
{
"name": "Team A",
"categories": [
{
"label": "FG%",
"value": 4676,
"points": 7
},
{
"label": "FT%",
"value": 8387,
"points": 9
}
]
}, {
"name": "Team B",
"categories": [
{
"label": "FG%",
"value": 5285,
"points": 10
},
{
"label": "FT%",
"value": 6111,
"points": 1
}
]
}
]
HTML
<div ng-controller="mainCtrl">
<table class="table table-striped table-condensed">
<thead>
<tr>
<th ng:click="changeSorting('name')">Name</th>
<th ng:click="changeSorting('name')">Points</th>
<th ng:click="changeSorting(value.label)" ng-repeat="(index, value) in data.teams[0].categories">{{value.label}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="team in data.teams | orderBy:sort.column:sort.descending ">
<td>{{team.name}}</td>
<td>{{team.totalPoints}}</td>
<td ng-repeat="(name, cat) in team.categories">
{{cat.value}}
</td>
</tr>
</tbody>
</table>
</div>
Вот подход, который я нашел несколько раз. В любом случае, из-за структуры моих данных, я боюсь, что это неправильная идея.
Сортировка на контроллере
$scope.sort = {
column: 'name',
descending: false
};
$scope.changeSorting = function(column) {
var sort = $scope.sort;
if (sort.column == column) {
sort.descending = !sort.descending;
} else {
sort.column = column;
sort.descending = false;
}
};
Вот обновленная скрипка: http://jsfiddle.net/SunnyRed/mTywq/2/
Где сортировочный стол? Кроме того, вы рассматривали [ng-grid] (http://angular-ui.github.io/ng-grid/) как готовое решение? –
Не было ни одного, потому что я не знаю никакого подхода. Я по-прежнему добавил общий способ сортировки таблиц, но это работает только для граждан первого уровня. Я посмотрел на ng-grid, но у меня сложилось впечатление, что вложенные данные не отображаются. – SunnyRed