@qblook

Почему AngularJS не всегда удаляет элементы DOM, которые удаляются из $scope?

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

Во view имеется ng-repeat, выполняющий отрисовку списка по хранящемуся в $scope массиву данных вида:

<tr ng-repeat="slot in model.slots[model.value1][model.value2]" ...

model собственно = $scope.model в контроллере представления.
По определенному событию производится загрузка данных с сервера и model.value1 / model.value2 меняют свои значения - в результате список должен отображаться (и отображается) другой средствами автоматического реагирования AngularJS на изменение этих переменных.

Проблема:
Периодически (не всегда, но очень часто) AngularJS при изменении этих переменных не удаляет старый список, а отображает его под новым - в итоге на странице сразу два списка: по старому состоянию переменных model.value1, model.value2 и по новому.

1. Ошибок в консоли нет;
2. Ручной запуск $scope.$apply после изменения переменных результата не дает т.к. $digest уже в процессе и в консоль падает ошибка;
3. Занулять/удалять старый массив пробовали - бесполезно: DOM все равно отображает элементы списка, которых давно уже нет в модели;
4. Верстка в порядке;
5. Данные в массивах тоже ок;

PS: Ощущение, что AngularJS словно "теряет" элементы DOM-дерева, предполагая что область отрисовки пуста и запускает ng-repeat для tr не удалив старые элементы.
PSS: tr расширяется собственной директивой, которая уже отвечает за отрисовку элемента массива

В чем может быть проблема?
Заранее спасибо!
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 3
zoonman
@zoonman
⋆⋆⋆⋆⋆
Для начала смотреть в tr.
Еще можно попробовать $scope.applyAsync()
Ответ написан
Комментировать
Попробуйте поставить track by в ng-repeat.
Ну и нужно больше информации, например часть кода, которая обновляет модели.
Ответ написан
Комментировать
AMar4enko
@AMar4enko
Вот эту вашу директиву tr покажите. Используйте track by
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы