添加和删​​除从一个ng-repeat到另一个ng-repeat的项目

时间:2014-09-11 00:28:23

标签: javascript angularjs dom

我有两个ng-repeats

<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>

我有2个问题,一个项目是List在移动到NewList时没有被删除,第二个问题是当我从NewList返回时它没有删除与它关联的项目.... I.E。我尝试删除最后一项,然后删除第一项。

这是我的角色

$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,因为当我过滤列表时它根本不起作用。

任何选项或建议都很棒!我现在很难过。

1 个答案:

答案 0 :(得分:0)

您没有为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;
    }
}

<击>