Angular.js ng-repeat не обновляет элементы dom, когда я уничтожаю объект области

Я пытаюсь удалить элементы в ng-repeat из контроллера, когда пользователь прокручивает экран вниз, чтобы ограничить количество элементов dom.

Вот что я пробовал

$scope.someStuff = someobject..

delete $scope.friendsViewObject[SomeIndex];

И никакого успеха. Если я удалю только элементы в объекте, то dom не будет обновляться.

И это директива, которая будет вызывать контроллер.

.directive('myDirective', function() {
 return function(scope, elm, attr) {
 var raw = elm[0];
 elm.bind('scroll', function() {
 if (((raw.scrollHeight - raw.offsetHeight) - raw.scrollTop) < 10 ) {
 scope.$apply(attr.friendsWhenScrolled);
 }
 });
 }
});
2 ответа

ОК, я обнаружил проблему.

Я думаю, что это может быть ошибка angular.js с ng-repeat.

Когда я уничтожаю элементы в массиве областей, фактические данные удаляются из представления, но элементы dom все еще существуют. Похоже, что ng-repeat отключает свойство array.length без предварительной проверки.. поэтому он получает все подсчет массива неправильно. Поэтому мне пришлось использовать метод shift() чтобы переустановить все элементы.

Решение:

Изменить это

delete $scope.friendsViewObject[SomeIndex];

К этому

$scope.friendsViewObject.shift()


Вместо атрибута $apply к атрибуту, когда вы измените DOM и хотите, чтобы угловые знали об этом, оберните изменение в $apply.

Итак, ваш код должен выглядеть примерно так:

.directive('myDirective', function() {
 return function(scope, elm, attr) {
 var raw = elm[0];
 elm.bind('scroll', function() {

 if (((raw.scrollHeight - raw.offsetHeight) - raw.scrollTop) < 10 ) {

 scope.$apply(function() {

 // delete here
 });
 }

 });
 }
});

licensed under cc by-sa 3.0 with attribution.