【发布时间】:2015-04-09 06:40:30
【问题描述】:
如何指定 ng-repeat 指令开始的索引而不是零?
我有一组结果,我只需要指定起始结果,它不为零。
【问题讨论】:
-
如果您需要对结果集进行排序或修改,请考虑使用过滤器。
标签: angularjs angularjs-ng-repeat
如何指定 ng-repeat 指令开始的索引而不是零?
我有一组结果,我只需要指定起始结果,它不为零。
【问题讨论】:
标签: angularjs angularjs-ng-repeat
无需编写任何代码,Angular 已使用 现有 内置 limitTo 过滤器完成此操作。只需使用负限制。来自limit 参数的文档:
返回的数组或字符串的长度。如果限制数是 正数,从源头开始限制项目数 数组/字符串被复制。 如果数字是负数,限制数量 复制源数组/字符串末尾的项目。限制 如果超过 array.length 将被修剪。如果未定义限制,则 输入将原样返回。
所以你可以在模板中这样使用它:
<ul>
<li data-ng-repeat="i in list | limitTo: (offset - list.length)">{{i}}</li>
</ul>
offset 是您的起始索引。参见示例plunker。
有一个可选的begin 参数,因此您不需要使用否定的limit,但begin 在angular v1.4 之前不可用,所以在我的示例中我坚持使用否定的limit。
【讨论】:
list.splice(list.indexOf(i), 1) 的操作,其中i 是您要删除的列表中的元素。
答案似乎很老了,
由于角度1.4.0limitTo 过滤器需要两个参数
limitTo: (limit) : (begin)
你可以说ng-repeat="item in list | limitTo:50:0"
这似乎是一个非常有效的解决方案,而不是使用两个不同的过滤器。
【讨论】:
你可以创建一个过滤器
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>
【讨论】:
app.filter放在哪里?在 controller.js 或 app.js 中?
假设你有一个items 的列表,你可以这样做:
<div ng-repeat="item in items" ng-if="$index >= myIndex">
{{item.Name}}
</div>
【讨论】:
我将创建一个返回所需子数组的函数。这可以进入控制器或指令的链接函数中。
<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>
【讨论】:
一种简单但不那么吸引人的方式
ng-repeat="item in model | limitTo: 10 | limitTo: -5"
【讨论】:
这是我正在寻找的结果:
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
【讨论】: