2014-09-11 63 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