Wie kann ich einen Index angeben, in dem eine ng-repeat-Direktive anstelle von null gestartet wird?ng-repeat Geben Sie einen Startindex an
Ich habe eine Reihe von Ergebnissen und ich muss nur die Startnummer angeben, die von Null verschieden ist.
Wie kann ich einen Index angeben, in dem eine ng-repeat-Direktive anstelle von null gestartet wird?ng-repeat Geben Sie einen Startindex an
Ich habe eine Reihe von Ergebnissen und ich muss nur die Startnummer angeben, die von Null verschieden ist.
Sagen Sie bitte eine Liste von items
haben, können Sie es wie folgt tun:
<div ng-repeat="item in items" ng-if="$index >= myIndex">
{{item.Name}}
</div>
Dieser entfernen Sie ein Element, ich möchte sie und starten Sie eine andere als 0. –
@FedericoVezzoli Wenn Sie benötigen, dann rate ich Ihnen, auf ein anderes Objekt zu iterieren, die Sortierung in der Steuerung oder vielleicht einen Filter wie andere vorgeschlagen haben. –
Sie einen Filter erstellen können
app.filter('startFrom', function() {
return function(input, start) {
if(input) {
start = +start; //parse to int
return input.slice(start);
}
return [];
}
});
und dann auf dem Sie gerade ng-repeat verwenden:
<div ng-repeat="item in items | startFrom : 2">{{item.Name}}</div>
Ich würde eine Funktion erstellen, die das gewünschte Subarray zurückgibt. Dies kann im Controller oder in der Link-Funktion einer Direktive geschehen.
<span ng-repeat="item in getSubArray(0, 4)">...</span>
Und die Funktion
$scope.getSubArray = function (start, end) {
return array.slice(start, end);
}
Ich sollte sagen, dass der Filter von Emanuel eine bessere Lösung ist, weil wiederverwendbar ist – Raulucco
Hier ist das Ergebnis dessen, was ich suchte:
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 [];
}
});
dank @emanuel
Das ist für mich gearbeitet:
<element ng-repeat="round in view.rounds track by $index">
<span>{{$index + 1}}</span>
</element>
Dieser den Trick tun könnte ...
<div ng-repeat="(i, item) in items">
<p>{{i+1}}</p>
</div>
keine Notwendigkeit, etwas zu kodieren, Winkel hat dies mit den bestehendenlimitTo Filter in integrierten getan. Verwenden Sie einfach ein negatives Limit. Aus der Dokumentation für das Argument limit
:
Die Länge des zurückgegebenen Arrays oder Zeichenfolge. Wenn die Grenzwertnummer positiv ist, wird die Anzahl der Elemente vom Anfang der Quelle array/string kopiert. Wenn die Zahl negativ ist, wird die Anzahl der Elemente vom Ende des Quellen-Arrays/der Zeichenfolge kopiert. Das Limit wird getrimmt, wenn es array.length überschreitet. Wenn das Limit nicht definiert ist, wird der -Eingang unverändert zurückgegeben.
So würden Sie es wie so in der Vorlage verwenden:
<ul>
<li data-ng-repeat="i in list | limitTo: (offset - list.length)">{{i}}</li>
</ul>
wo offset
Startindex ist. Siehe Beispiel plunker.
Es ist ein optionales begin
Argument, so dass Sie eine negative limit
nicht benötigen, aber die begin
nicht verfügbar war, bevor Winkel v1.4, damit ich zu einem negativen limit
in meinem Beispiel stecken haben.
die eleganteste Lösung! Vielen Dank! –
Die Antworten scheint ziemlich alt zu sein, nimmt
seit Winkel 1.4.0
der LimitTo Filter zwei Parameter
limitTo: (limit) : (begin)
Sie ng-repeat="item in list | limitTo:50:0"
dies eine viel effektive Lösung sagen kann, zu sein scheint eher mit zwei verschiedenen Filtern.
Danke! Ich habe nach einer besseren Lösung gesucht, jetzt habe ich eine gefunden, dank dir. Wer sich für die Dokumente interessiert https://docs.angularjs.org/api/ng/filter/limitTo IMHO sollte hier auch erwähnt werden https://docs.angularjs.org/api/ng/directive/ngRepeat – Megajin
Dies sollte sein die ausgewählte Antwort ab AngualrJS v1.4 +. –
Wenn Sie Ihre Ergebnismenge prüfen, mit einem Filter sortieren oder zu modifizieren. – bluetoft