Как я могу указать индекс, в котором вместо n0 будет запускаться директива ng-repeat?
У меня есть набор результатов, и мне просто нужно указать начальную, отличную от нуля.
Как я могу указать индекс, в котором вместо n0 будет запускаться директива ng-repeat?
У меня есть набор результатов, и мне просто нужно указать начальную, отличную от нуля.
Не нужно ничего кодировать, angular сделал это с существующим встроенным фильтром limitTo. Просто используйте отрицательный предел. Из документов для аргумента limit
:
Длина возвращаемого массива или строки. Если предельное число положительное, ограничение количества элементов с начала источника array/string копируются. Если число отрицательное, предельное число элементы из конца исходного массива/строки копируются. Лимит будет обрезана, если она превысит length array. Если предел равен undefined, вход будет возвращен без изменений.
Итак, вы должны использовать его так, как в шаблоне:
<ul>
<li data-ng-repeat="i in list | limitTo: (offset - list.length)">{{i}}</li>
</ul>
где offset
- ваш начальный индекс. См. Пример plunker.
Существует необязательный аргумент begin
, поэтому вам не нужно использовать отрицательный limit
, но begin
недоступен до angular v1.4, поэтому я придерживался отрицательного limit
в моем пример.
Вы можете создать фильтр
app.filter('startFrom', function() {
return function(input, start) {
if(input) {
start = +start; //parse to int
return input.slice(start);
}
return [];
}
});
а затем вы просто используете его на ng-repeat:
<div ng-repeat="item in items | startFrom : 2">{{item.Name}}</div>
Скажите, что у вас есть список items
, вы можете сделать это следующим образом:
<div ng-repeat="item in items" ng-if="$index >= myIndex">
{{item.Name}}
</div>
Ответы кажутся довольно старыми,
так как angular 1.4.0
фильтр limitTo принимает два параметра
limitTo: (limit) : (begin)
вы можете сказать ng-repeat="item in list | limitTo:50:0"
это, кажется, очень эффективное решение, а использование двух разных фильтров.
Я бы создал функцию, которая возвращает субаремы желания. Это может идти в контроллере или в функции связи директивы.
<span ng-repeat="item in getSubArray(0, 4)">...</span>
И функция
$scope.getSubArray = function (start, end) {
return array.slice(start, end);
}
Это сработало для меня:
<element ng-repeat="round in view.rounds track by $index">
<span>{{$index + 1}}</span>
</element>
Это может сделать трюк...
<div ng-repeat="(i, item) in items">
<p>{{i+1}}</p>
</div>
Вот результат того, что я искал:
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 [];
}
});
спасибо @emanuel