您可以创建自定义过滤器由多个键
在你的js文件进行过滤: -
App.filter('multiOrderBy', ["$filter", function ($filter) {
return function (items, key1, key2) {
var newItems = [];
if(!items || !items.length)
return newItems;
function sortKey1(obj) {
return obj[key1].toLowerCase();
}
function sortKey2(obj) {
return obj[key2].toLowerCase();
}
if(key1)
newItems = $filter('orderBy')(items, sortKey1);
if(key2)
newItems = $filter('orderBy')(newItems, sortKey2);
return newItems;
}
}]);
在HTML: -
<div ng-repeat="item in items | multiOrderBy: 'name': 'category'"></div>
在我的案例是: -
$scope.items = [
{"name":"ABC", "category":"Project"},
{"name":"xyz", "category":"Project"},
{"name":"red", "category":"Color"},
{"name":"Blue", "category":"Color"}
];
使过滤后阵将是: -
$scope.items = [
{"name":"Blue", "category":"Color"},
{"name":"red", "category":"Color"},
{"name":"ABC", "category":"Project"},
{"name":"xyz", "category":"Project"}
];
可以在控制器的$ scope中为第二个参数声明一个变量,并将其绑定到视图上的某种输入上,而不是向ng-repeat添加额外的参数: $ scope.sortBy = someParamToSortBy; //例如:'price','name'等... 然后,您的自定义orderBy函数可以访问$ scope.sortBy而不传入第二个参数。 $ scope.mySortFunction = function(item){ return(item [$ scope.sortBy]); }; – cre8value