Ich habe eine Vorlage, in der ich einige HTML nur generieren möchte, wenn das aktuelle Element einige Felder von dem vorherigen Element hat. Wie kann ich auf das vorherige Element in einer ng-Wiederholung zugreifen?Wie erhält man das vorherige Element in ng-repeat?
42
A
Antwort
87
Sie so etwas wie
tun können<div ng-app="test-app" ng-controller="MyController">
<ul id="contents">
<li ng-repeat="content in contents">
<div class="title">{{$index}} - {{content.title}} - {{contents[$index - 1]}}</div>
</li>
</ul>
</div>
JS
var app = angular.module('test-app', []);
app.controller('MyController', function($scope){
$scope.contents=[{
title: 'First'
}, {
title: 'Second'
}, {
title: 'Third'
}]
})
Demo: Fiddle
Vorsicht:$index
ist für die Richtlinie Array, das als der Umfang Array unterschiedlich sein kann. Verwenden Sie eine Inline-Variable, um auf das richtige Array zuzugreifen.
<li ng-repeat="content in (correctContents = (contents | orderBy:'id'))">
{{ correctContents[$index - 1] }} is the prev element
</li>
Wenn Sie filtern oder orderBy, contents[$index] != content
.
9
Eine Möglichkeit ist, die $ Index für die Ausrichtung vorherigen Artikel zu verwenden:
HTML:
<div ng-repeat="item in items">
<span>{{$index}}: </span>
<span ng-show="items[$index-1].name=='Misko'" ng-bind="item.name"></span>
</div>
JS:
app.controller('AppController',
[
'$scope',
function($scope) {
$scope.items = [
{name: 'Misko'},
{name: 'Igor'},
{name: 'Vojta'}
];
}
]
);
5
Warum nicht key
von ng-repeat
verwenden? ($index
scheint heikel im Vergleich zu key
)
<div ng-repeat="(key, item) in data">
<p>My previous item is {{ data[key-1] }}, my actual item is {{ item }}
</div>
Aber wenn ich Filter in ng-repeat haben, werden die Sammlungen Unterschiede. Irgendwelche Ideen? – VadimAlekseev
@VadimAlekseeev Sie können so etwas tun, um auf Ihre gefilterten Daten zu verweisen: 'ng-repeat =" item in (filteredData = (Daten | Filter: Begriff)) "' und in der Antwort von @ arun-p-johny mit 'filteredData [$ index-1]' anstelle von 'contents [$ index-1]' – jpmorin
Meine Sammlung ist ein Wörterbuch, ich kann nicht per Index auf Objekte zugreifen, gibt es eine Möglichkeit, dies zu tun? : S –