将项目从一个ng重复添加到另一个ng反复

adding and removing items from one ng-repeat to another ng-repeat

本文关键字:ng 添加 反复 另一个 一个 项目      更新时间:2023-09-26

我有两个ng重复

<p ng-repeat="Item in List | filter:{category:currentCategory.name} | orderBy:'name' track by Item.name ">
      <a ng-click="addItem(Item)"><span class="glyphicon glyphicon-plus"></span>
          {{Item.name}}
      </a>
</p>
<p ng-repeat="NewItem in NewList | orderBy:'name' track by NewItem.name">
   <a>{{NewItem .name}}</a>
   <a ng-click="returnItem(NewItem)"><span class="glyphicon glyphicon-trash"></span></a>
</p>

我有两个问题,第一个问题是当它移动到NewList时,List没有被删除,第二个问题是,当我从NewList返回item时,它不会删除与它相关的项目……也就是说,我试图删除最后一个项目,它删除了第一个项目。

这是我的角度

$scope.addItem = function (Item) {
    $scope.NewList.push(Item);
    $scope.List.splice(Item , 1);
};
$scope.returnItem = function (NewItem) {
    $scope.List.push(NewItem);
    $scope.NewList.splice(NewItem, 1);
};

我没有使用$index,因为当我过滤列表时,它根本不起作用。

任何选择或建议都将是令人惊叹的!我现在被难住了。

您没有为Array.splice函数提供所需的参数。

Array.slice的第一个参数应该是要从列表中删除的项的索引。目前,您正在为其提供要删除的项目。

您应该首先找到要删除的项的索引。

试试这个

$scope.NewList.push(Item);
var index = $scope.List.indexOf(Item);
if(index !== -1) $scope.List.splice(index , 1);

注意:Array.indexOf不适用于对象数组。由于您确实有一个对象数组,因此您必须遍历列表(使用for循环),并比较name属性以找到要删除的项的索引。

var index = -1;
for (var i = 0; i < $scope.List.length; i++) {
    if($scope.List[i].name === Item.name){
        index = i;
        break;
    }
}