Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS limitTo filter for ngRepeat on an object (used like a dictionary)

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}
}
like image 984
Yogesh Mangaj Avatar asked Sep 16 '14 12:09

Yogesh Mangaj


2 Answers

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/

like image 168
Michał Ignaszewski Avatar answered Oct 27 '22 06:10

Michał Ignaszewski


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.

like image 10
Cody Braun Avatar answered Oct 27 '22 06:10

Cody Braun