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>
क्या आपने इसके बजाय एक कस्टम फ़िल्टर लिखने पर विचार किया है? आपके मामले में यह एक शर्म की बात है कि 'रिवर्स' ध्वज (यानी दूसरा तर्क) 'ऑर्डरबी' की पेशकश केवल पूरे सरणी पर लागू होती है। फिल्टर के संबंध में – miqid
मैं दूसरा @miqid। आप इस लिंक पर एक नज़र रखना चाहते हैं। यह आपकी मदद कर सकता है। http://justinklemm.com/angularjs-filter-ordering-objects-ngrepeat/ –
न्यूनतम उदाहरण के साथ एक प्लंकर या फीडल पोस्ट करें, तो –