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

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

1-нг-повтор + фильтр работает нормально:

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

2-нг-повтор + фильтр + нумерация страниц тоже работает нормально:

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

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

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

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

вот скриншот моего стола

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

2 ответа

Наконец, я исправил проблему с другой логикой, я использовал track by $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 для определения текущего объекта.

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

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

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

Другие вопросы по тегам