我正在尝试从控制器中删除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);
}
});
}
});
答案 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()