如何从Angular.js数组中删除元素/节点

72

我想从数组 $scope.items 中删除元素,以便在视图中 ng-repeat="item in items" 中删除项目。

以下是一些演示用代码:

for(i=0;i<$scope.items.length;i++){
    if($scope.items[i].name == 'ted'){
      $scope.items.shift();
    }
}

如果视图中有名称为Ted,我想要删除第一个元素。虽然它可以正常运行,但是因为所有的数组键都发生了移动,所以视图重新加载了所有元素,这在我创建的移动应用程序中造成了不必要的延迟。

是否有人对此问题有解决方案?


我已经成功使用splice修改了一个在ng-repeat中使用的数组,没有任何奇怪的副作用。 - BoxerBucks
看起来items是一个数组的数组,或者你不能调用items[i].shift(); - zs2020
嗨,感谢回复。抱歉,我的问题代码中有个错别字,我刚刚更新了它。 - TheNickyYo
那为什么要移除数组的第一个元素而不是位置 i 处的元素呢? - zs2020
只需在控制器中添加 $filter,3行代码就能解决你的问题。 - Maxim Shoustin
可能是重复的问题,参考如何使用ng-click从数组中删除项目或对象? - azerafati
12个回答

1
如果您将任何与列表相关的函数关联到splice函数上时,这些关联也会被删除。我的解决方案:
$scope.remove = function() {
    var oldList = $scope.items;
    $scope.items = [];

    angular.forEach(oldList, function(x) {
        if (! x.done) $scope.items.push( { [ DATA OF EACH ITEM USING oldList(x) ] });
    });
};

列表参数被命名为 items。 参数 x.done 表示该项是否将被删除。希望能够帮到你。问候。

0

我的项目有唯一的ID。我正在使用Angular的$filter服务通过筛选模型来删除其中一个:

var myModel = [{id:12345, ...},{},{},...,{}];
...
// working within the item
function doSthWithItem(item){
... 
  myModel = $filter('filter')(myModel, function(value, index) 
    {return value.id !== item.id;}
  );
}

如果需要,您也可以使用模型项的$$hashKey属性:$$hashKey:"object:91"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接