Подтвердить что ты не робот

Как получить предыдущий элемент в ng-repeat?

У меня есть шаблон, в котором я хочу сгенерировать некоторый HTML, только если текущий элемент имеет несколько полей из предыдущего элемента. Как я могу получить доступ к предыдущему элементу в ng-repeat?

4b9b3361

Ответ 1

Вы можете сделать что-то вроде

<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'
    }]
})

Демо: Fiddle


Будьте осторожны: $index предназначен для массива директив, который может отличаться от массива scope. Используйте встроенную переменную для доступа к правильному массиву.

<li ng-repeat="content in (correctContents = (contents | orderBy:'id'))">
  {{ correctContents[$index - 1] }} is the prev element
</li>

Если вы фильтруете или orderBy, contents[$index] != content.

Ответ 2

Один из способов - использовать индекс $для таргетинга на предыдущий элемент:

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'}
        ];

      }
    ]
  );

Plunker

Ответ 3

Почему бы не использовать key от ng-repeat? ($index кажется сложным по сравнению с key)

<div ng-repeat="(key, item) in data">
  <p>My previous item is {{ data[key-1] }}, my actual item is {{ item }}
</div>