Трек 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....">
надеюсь это поможет