我最近得到了一个关于如何按照我从<select>
下拉菜单中选择的单个字段进行排序的答案。
HTML :
<body ng-controller="AppCtrl">
Sort by: <select ng-model="sortField" ng-options="o.label for o in fields"></select>
<label>
<input type="checkbox" ng-model="inverse"> inverse
</label>
<hr>
<table>
<tr data-ng-repeat="row in grid.data|orderBy:sortField.key:inverse">
<td>{{row.id}}</td>
<td>{{row.number}}</td>
<td>{{row.text}}</td>
</tr>
</table>
</body>
JS :
app.controller('AppCtrl', ['$scope', function($scope) {
$scope.fields = [
{ label: 'ID', key: 'id' },
{ label: 'Nr.', key: 'number' },
{ label: 'Text', key: 'text' }
];
$scope.sortField = $scope.fields[2];
$scope.inverse = false;
$scope.grid = {
data: [
{ id: 1, number: 4, text: 'A' },
{ id: 2, number: 3, text: 'E' },
{ id: 3, number: 2, text: 'B' },
{ id: 4, number: 1, text: 'D' },
{ id: 5, number: 0, text: 'C' }
]
};
}]);
这很好用,但现在我想允许按多个字段排序。例如,在这种情况下,“数字”然后是“文本”字段。
有没有人尝试过如何解决这个问题?如果是这样,我会感谢他们给我的任何建议。
答案 0 :(得分:0)
您可以尝试连接要排序的字段,然后使它们不可见 - 这样您就有了一个不可见的排序键。
答案 1 :(得分:0)
如果您希望AngularJS首先对 number 进行排序,然后 text ,则可以通过以下方式向fields
添加另一个条目:
{ label: 'Number - Text', key: ['number', 'text'] }
orderBy表达式可以是数组:
Array:函数或字符串谓词的数组。第一个谓词 在数组中用于排序,但当两个项目相同时, 使用下一个谓词。