@Devate

Как в AngularJS обновить данные в ngRepeat через ajax без перерисовки DOM?

Здравствуйте!

Хочу по таймеру обновлять список поступивших заказов на текущей странице. Понимаю, что круче это делать через веб-сокеты, но это попозже :) Пока хочу так.

Данные выводятся через ngRepeat с track by - прочитал в доках, что таким образом ангуляр знает точный идентификатор элемента, а не придумывает его сам, и, я так понял, что когда массив данных обновится - если идентификаторы совпадут, то DOM таких элементов не тронется. Но у меня всё не так - все перерисовывается всё равно :( Данные в контроллере обновляются так:

$timeout(function () {
  self.orders = Order.query();
}, 30000);


Выводятся так:

<tr data-ng-repeat="order in $ctrl.orders track by order.id">
...


Подскажите, пожалуйста, что я делаю не так? Спасибо!
  • Вопрос задан
  • 483 просмотра
Пригласить эксперта
Ответы на вопрос 3
Насколько я понимаю то что вы написали по поводу ререндера будет работать в случае, когда делается push/pop массива. А когда массив заменяется совершенно другим - происходит полный ререндер.
Ответ написан
@lega
Если у вас происходит перерисовка, значит идентификаторы (order.id) не совпадают, проверьте что идентификаторы есть и они простого типа (число/строка).
Если большая часть идентификаторов не совпадает, то эффективней использовать track by $index.
Ответ написан
Комментировать
dauren101
@dauren101
Python, Django ,Vue.js
$scope.$apply();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект