Трек ng-repeat по $index не работает с нумерацией страниц

Я работаю с ng-repeat + Filter + Pagination (ui-bootstrap)

1- ng-repeat + фильтр работает нормально:

<tr data-ng-repeat="target in targets | filter:search track by $index">

2- ng-repeat + filter + pagination тоже работает нормально:

<tr data-ng-repeat="target in targets | filter:search  | startFrom:(currentPage - 1) * pageSize  | limitTo: pageSize ">

3- проблема в том, что я комбинирую ng-repeat + Filter + Pagination + track by $index

<tr data-ng-repeat="target in targets | filter:search  | startFrom:(currentPage - 1) * pageSize  | limitTo: pageSize track by $index">

Я получаю перезапуск значения индекса с 0 до 4 на каждой странице

вот скриншот моей таблицы

Любая идея о правильном порядке «отслеживать по $ index»! где я должен разместить его?


person Inoubli    schedule 12.05.2016    source источник


Ответы (2)


Наконец, я исправил свою проблему с другой логикой, я использовал отслеживание по $index для редактирования выбранного поля строки в моей таблице следующим образом:

<td><input class="todo" type="text" ng-model-options="{ updateOn: 'blur' }" ng-change="updateTarget(targets[$index])" ng-model="target.YEAR"></td>
<td><input class="todo" type="text" ng-model-options="{ updateOn: 'blur' }" ng-change="updateTarget(targets[$index])" ng-model="target.MONTH"></td>

Теперь я удалил трек по $index из своего ng-repeat и изменил свой td на:

<td><input style="width:40px" class="todo" type="text" ng-model-options="{ updateOn: 'blur' }" ng-change="updateTarget(target)" ng-model="target.YEAR"></td>
<td><input style="width:40px" class="todo" type="text" ng-model-options="{ updateOn: 'blur' }" ng-change="updateTarget(target)" ng-model="target.MONTH"></td>

Таким образом, при ng-change моя функция обновления будет вызываться со всем объектом в качестве параметра, нет необходимости в $index для определения текущего объекта.

person Inoubli    schedule 13.05.2016

Обычно правильный синтаксис выглядит примерно так:

<div ng-repeat="item in items track by $index | my filter....">

надеюсь это поможет

person itsme    schedule 12.05.2016
comment
да, это правда, но в моем случае проблема может быть вызвана нумерацией страниц, в моем контроллере у меня есть: todoApp.filter('startFrom', function(){ return function(data, start){ return data.slice(start); } }); - person Inoubli; 12.05.2016