ng-repeat specify a starting index

后端 未结 9 762
悲哀的现实
悲哀的现实 2020-12-03 06:41

How can I specify an index where an ng-repeat directive is going to start instead of zero?

I have a set of results and I just need to specify the starting one, which

相关标签:
9条回答
  • 2020-12-03 06:51

    Say you have a list of items, you can do it like this:

    <div ng-repeat="item in items" ng-if="$index >= myIndex">
       {{item.Name}}
    </div>
    
    0 讨论(0)
  • 2020-12-03 06:57

    A simple but not so attractive way

     ng-repeat="item in model | limitTo: 10 | limitTo: -5"
    
    0 讨论(0)
  • 2020-12-03 07:01

    Here is the result of what I was looking for:

    angular.module('starter.filters', []).filter('startFrom', function() {
    return function(input, start) {
        if(input) {
            start = +start; //parse to int
            appended = input.slice(0,start);
            initialArray = input.slice(start);
            finalArray= initialArray.concat(appended);
            return finalArray;
        }
        return [];
    }
    });
    

    thanks @emanuel

    0 讨论(0)
  • 2020-12-03 07:08

    I would create a function that returns the desire subarray. This can go in the controller or the link function of a directive.

    <span ng-repeat="item in getSubArray(0, 4)">...</span>
    

    And the function

    $scope.getSubArray = function (start, end) {
       return array.slice(start, end);
    }
    
    0 讨论(0)
  • 2020-12-03 07:10

    You can create a filter

    app.filter('startFrom', function() {
        return function(input, start) {
            if(input) {
                start = +start; //parse to int
                return input.slice(start);
            }
            return [];
        }
    });
    

    and then you just use it on the ng-repeat:

    <div ng-repeat="item in items | startFrom : 2">{{item.Name}}</div>
    
    0 讨论(0)
  • 2020-12-03 07:12

    No need to code anything, angular has done this with the existing built-in limitTo filter. Just use a negative limit. From the docs for the limit argument:

    The length of the returned array or string. If the limit number is positive, limit number of items from the beginning of the source array/string are copied. If the number is negative, limit number of items from the end of the source array/string are copied. The limit will be trimmed if it exceeds array.length. If limit is undefined, the input will be returned unchanged.

    So you would use it like so in the template:

    <ul>
       <li data-ng-repeat="i in list | limitTo: (offset - list.length)">{{i}}</li>
    </ul>
    

    where offset is your start index. See sample plunker.

    There is an optional begin argument so you don't need use a negative limit but the begin was not available before angular v1.4 so I have stuck to a negative limit in my example.

    0 讨论(0)
提交回复
热议问题