Reputation: 3280
Is it possible to use limitTo
filter on a ngRepeat
directive which is repeating the properties of an Object and not items in an Array.
I am aware that the official documentation says that the input to limitTo
needs to be an array or a string. But wondering if there's a way to get this to work.
Here's a sample code:
<li ng-repeat="(key, item) in phones_dict |orderBy:'-age'| limitTo:limit_items"></li>
And $scope.phones_dict
is an Object like
{
item_1: {name:"John", age: 24},
item_2: {name:"Jack", age: 23}
}
Upvotes: 9
Views: 12332
Reputation: 1554
Default limitTo filter has support for array-like objects (example) after 1.5.7
Upvotes: 0
Reputation: 657
Adding
ng-if ="$index < limit"
to the ng-repeat tag did the trick for me, though it's probably not strictly the "right" way to do this.
Upvotes: 10
Reputation: 8663
Or you could use 'track by $index'... And your limitTo would be:
limitTo: $index == 5 (or any value)
Upvotes: 1
Reputation: 1134
limitTo works only for strings and arrays, for object use own filter for example:
myApp.filter('myLimitTo', [function(){
return function(obj, limit){
var keys = Object.keys(obj);
if(keys.length < 1){
return [];
}
var ret = new Object,
count = 0;
angular.forEach(keys, function(key, arrayIndex){
if(count >= limit){
return false;
}
ret[key] = obj[key];
count++;
});
return ret;
};
}]);
Example on fiddle: http://jsfiddle.net/wk0k34na/2/
Upvotes: 15