0

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

这是我尝试过的

$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);
            }
        });
    }
});
4

2 回答 2

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
                });
            }

        });
    }
});
于 2013-08-15T13:34:29.497 回答
0

好的,我发现了问题..

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

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

解决方案:

改变这个

delete $scope.friendsViewObject[SomeIndex];

至此

$scope.friendsViewObject.shift()

于 2013-08-15T14:18:28.457 回答