2014-09-11 65 views
0

我有两个NG-重复添加和删除一个NG-重复项目的方式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> 

的我有2个问题一个产品列表,当它移动到NewList不被删除第二个问题是,当我从NewList中返回Item时,它不删除与它关联的项.... IE我尝试删除最后一个项目,并删除第一个项目。

这里是我的角度

$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); 
}; 
我不使用$指标,因为它不工作时,我筛选列出所有

任何选项或建议将是真棒!我现在很困难。

回答

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

+0

所以只能拼接上的项目的索引工作?......如果是真的有另一种方式从列表中删除一个项目?我会尝试这个,我的恐惧是,orderBy和Filter会被搞砸。 – user3271518 2014-09-11 01:08:12

+0

是的,拼接需要你想删除的物品的索引,所以你将不得不找到你想删除的物品的索引。您在ngRepeat中使用的过滤器只会更改生成的HTML。它不会重新排列您的$ scope.List – jcruz 2014-09-11 01:12:01

+0

罗杰的项目,所以这就是为什么你的代码基本上说,如果它没有==名称然后循环(再试一次)....有没有更有效的方式来显示信息?我有一个下拉菜单来过滤列表,这是我没有使用$ index索引的主要原因,并且通过$ index – user3271518 2014-09-11 01:20:51