2015-02-09 18 views
40

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.

+1

Wenn Sie Ihre Ergebnismenge prüfen, mit einem Filter sortieren oder zu modifizieren. – bluetoft

Antwort

29

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> 
+0

Dieser entfernen Sie ein Element, ich möchte sie und starten Sie eine andere als 0. –

+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. –

35

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> 
+0

Wo setzt du 'app.filter'? in controller.js oder app.js? – Whitecat

+0

in diesem Fall app.js –

+1

"die" App-Variable ist, dass eine Variable erhalten Sie aus dem Aufruf von angular.module() Scheinbar – Felype

4

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); 
} 
+0

Ich sollte sagen, dass der Filter von Emanuel eine bessere Lösung ist, weil wiederverwendbar ist – Raulucco

0

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

2

Das ist für mich gearbeitet:

<element ng-repeat="round in view.rounds track by $index"> 
    <span>{{$index + 1}}</span> 
</element> 
2

Dieser den Trick tun könnte ...

<div ng-repeat="(i, item) in items"> 
    <p>{{i+1}}</p> 
</div> 
46

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.

+2

die eleganteste Lösung! Vielen Dank! –

31

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.

https://code.angularjs.org/1.4.0/docs/api/ng/filter/limitTo

+0

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

+1

Dies sollte sein die ausgewählte Antwort ab AngualrJS v1.4 +. –

Verwandte Themen