ng-repeat specify a starting index
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 is different from zero.
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.
The answers seems to be quite old,
since angular 1.4.0
the limitTo filter takes two parameters
limitTo: (limit) : (begin)
you can say ng-repeat="item in list | limitTo:50:0"
this seems to be a much effective solution rather using two different filters.
https://code.angularjs.org/1.4.0/docs/api/ng/filter/limitTo
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>
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>