angular.module('orderByExample', [])
.controller('ExampleController', ['$scope', function($scope) {
var friends =
[{name:'Jon', phone:'555-1212', age:10},
{name:'Zach', phone:'555-2276', age:7},
{name:'Zach', phone:'555-9876', age:19},
{name:'Zach', phone:'555-9276', age:13},
{name:'Mike', phone:'555-4321', age:21},
{name:'Adam', phone:'555-5678', age:35},
{name:'Julie', phone:'555-8765', age:29}];
function getName(f){
return f.name;
}
function getAge(f){
return f.age;
}
var orderByName = new OrderByBuilder().desc(getName).build();
var orderByNameAndAge = new OrderByBuilder().desc(getName).asc(getAge).build();
$scope.friendLists = [
{label:'Not Ordered', friends: friends},
{label:'Name DESC', friends: orderByName(friends)},
{label:'Name DESC, Age ASC', friends: orderByNameAndAge(friends)}
];
}]);
function OrderByBuilder(orderings){
var _orderings = [];
return {
asc: function(fn){
addOrdering(true,fn);
return this;
},
desc: function(fn){
addOrdering(false,fn);
return this;
},
build: build
};
function addOrdering(asc,fn){
_orderings.push({
getterFn: fn,
asc: asc
});
return this;
}
function build(){
var compare = _orderings.reverse().reduce(function(nextComparer, ordering){
return getComparerFn(ordering, nextComparer);
},null);
return function(xs){
return xs.slice().sort(compare);
};
}
// a comparerFn has the following signature:
// \t \t function(a: obj, b: obj): int
function getComparerFn(ordering, nextComparer){
var next = nextComparer || function(a,b){ return 0; };
var getVal = ordering.getterFn;
return function(a,b){
var aVal = getVal(a);
var bVal = getVal(b);
if(aVal < bVal){ return ordering.asc ? -1 : 1; }
if(aVal > bVal){ return ordering.asc ? 1 : -1; }
return next(a,b);
};
}
}
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.6/angular.min.js"></script>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<div ng-app="orderByExample">
<div ng-controller="ExampleController">
<div class="row">
<div ng-repeat="friendList in friendLists" class="col-sm-4">
<h4>{{friendList.label}}</h4>
<table class="table table-bordered table-condensed">
<tr>
<th>Name</th>
<th>Phone Number</th>
<th>Age</th>
</tr>
<tr ng-repeat="friend in friendList.friends">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
</tr>
</table>
</div>
</div>
</div>
</div>
대신 사용자 정의 필터를 쓰는 것이 좋습니다. 두 번째 인수 인'reverse' 플래그가'orderBy'를 제공하는 것이 전체 배열에만 적용된다는 것은 유감입니다. – miqid
필터에 관한 두 번째 @miqid. 이 링크를보고 싶을 수도 있습니다. 그것은 당신을 도울 수 있습니다. http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/ –
최소한의 예를 들어 광고를 게시하거나 도움을주는 것이 더 쉬울 것입니다. –