使用Angular ng-repeat显示$scope.currentMessageList
数组
我还有一个删除按钮,通过ng-click绑定到remove功能,如下所示:
remove: function () {
for (var i = 0; i < 25; i++) {
var index = i;
$scope.currentMessageList.splice(index, 1);
console.log($scope.currentMessageList.length + 'left');
}
}
当我调用remove函数时,此集合中有25个项目, 我得到了这个输出:
24left
23left
22left
21left
20left
19left
18left
17left
16left
15left
14left
13left
13times X 12left
如果我用angular.forEach替换for循环 我只剩下“12左”,仍然不会删除超过13个项目
我也试过使用angular.apply,而不是我已经进行了摘要错误
答案 0 :(得分:0)
您在行走阵列时移除物品。
当你到达阵列的一半时,你已经删除了一半的物品,所以你不会删除任何其他物品。
您可以通过始终删除第一个项目或从24向后迭代来解决此问题。
答案 1 :(得分:0)
在循环中删除数组项时,索引也会被移位。结果,您只能迭代其中的一半。这就是问题所在。
如果要清除25个第一项,可以使用Array.prototype.shift方法删除它们。在这种情况下,它将删除数组的第一个元素25次,给出预期的结果:
remove: function () {
for (var i = 0; i < 25; i++) {
currentMessageList.shift();
}
}
答案 2 :(得分:0)
在迭代数组时执行splice
是一个坏主意。
你应该替换
for( var i = 0; i < 25; i++ ){
var index = i;
$scope.currentMessageList.splice( index, 1 );
console.log($scope.currentMessageList.length + 'left');
}
简单
$scope.currentMessageList.splice( 0, 25 );
答案 3 :(得分:0)
您无需遍历数组即可删除所有项目。就这样做:
remove : function(){
$scope.currentMessageList = [];
}
也可以查看this answer。还有其他方法可以实现这一点,也是有效的。
答案 4 :(得分:0)
拼接数组时...数组的长度会发生变化。 当您尝试删除索引13处的元素时,长度仅为12。 因此它没有被删除。 而不是拼接,尝试shift();