当我销毁范围对象时,Angular.js ng-repeat不更新dom元素

时间:2013-08-15 12:51:09

标签: angularjs angularjs-ng-repeat

我正在尝试从控制器中删除ng-repeat中的元素,以便用户向下滚动屏幕以限制视图中的dom元素数量。

继承人我试过的事情

$scope.someStuff = someobject..

delete $scope.friendsViewObject[SomeIndex];

没有成功。如果我单独删除对象中的元素,dom将不会更新。

这是调用控制器的指令。

<div myDirective="loadMyController()" ></div>
.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 个答案:

答案 0 :(得分:0)

而不是属性上的$apply,当您更改DOM并希望angular知道它时,请将更改包装在$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
                });
            }

        });
    }
});

答案 1 :(得分:0)

好的,我发现了这个问题..

我认为这可能是ng-repeat的一个angular.js错误..

当我销毁范围数组中的元素时,实际数据将从视图中删除但是dom元素仍然存在。看起来ng-repeat关闭array.length属性而没有任何预先检查..所以它得到所有数组计数错误..所以我不得不使用方法shift()来重新安排所有元素..

解决方案:

更改此

delete $scope.friendsViewObject[SomeIndex];

到此

$scope.friendsViewObject.shift()