2016-10-25 127 views
3

如何從基於過濾器的數組中刪除元素,只在'quantity'爲0且'isSelected'爲false時刪除這些索引?任何建議。這裏是我的代碼:基於angularjs中的過濾器從陣列中刪除元素

<table data-ng-repeat="st in Absorb track by $index" data-ng-cloak data-ng-init="remove(st)">           
    <tr> 
     <td>              
      <input type="radio" name="groupName" data-ng-model ="st.isSelected" data-ng-checked="(st.isSelected == true)"/> 
     </td> 
     <td>              
      <span>{{st.ProjectedQuantityOnHand}}</span> 
     </td> 
     <td style="display:none" data-ng-if="st.ProjectedQuantityOnHand == 0">              
      <input type="number" data-ng-model="st.ProjectedQuantityOnHand" style="display:none"> 
     </td> 
    </tr> 
</table> 

JS代碼:

$scope.Absorb = [ 
    {"Name":"apple", ProjectedQuantityOnHand:"0", isSelected:true}, 
    {"Name":"mango", ProjectedQuantityOnHand:"0", isSelected:false} 
    {"Name":"ball", ProjectedQuantityOnHand:"1", isSelected:false} 
    {"Name":"football", ProjectedQuantityOnHand:"1", isSelected:false} 
] 

$scope.remove = function (item) { 
    var availableqauantity = 0 
    debugger 
    angular.forEach($scope.StockList, function (i) { 
     var FilteredProduct1 = $filter('filter')($scope.StockList, { isSelected: false, ProjectedQuantityOnHand: 0 }); 
     if (FilteredProduct1.length > 0) { 
      availableqauantity = FilteredProduct1[0].ProjectedQuantityOnHand; 
     if (availableqauantity == 0) 
      $scope.StockList.splice(i,1); 
     } 
    }); 
} 
+0

你真的想從數組中刪除這些項嗎?還是你想讓它們不顯示? – Eddi

+0

@Eddi你只是不想爲angulars 1.x或2顯示 – Felixerity

+0

?在角度2中,您可以在組件的類中進行篩選,而不是在使用篩選器管道的模板中進行篩選。 –

回答

2
<table data-ng-repeat="st in Absorb | filter:{isSelected: '!false', ProjectedQuantityOnHand: '!0'} track by $index" data-ng-cloak> 

這將只顯示這些項目,它比假isSelected不同比0 ProjectedQuantityOnHand不同無需外部功能。

UPDATE

https://plnkr.co/edit/gPz5pKSIOxZ6odSU3TfF?p=preview

檢查這個例子。在這裏,我只有在ProjectedQuantityOnHand爲0且isSelected爲false時才創建一個自定義過濾器來隱藏項目。

app.filter('customFilter', function() { 
    return function(values) { 
    var filtderResult = []; 
    angular.forEach(values, function(value) { 
     if (value.isSelected || value.ProjectedQuantityOnHand !== 0) { 
     filtderResult.push(value); 
     } 
    }); 
    return filtderResult; 
    } 
}); 
+0

我想這不適用於我的情況。我必須只隱藏那些顯示數量爲0的元素,並且必須顯示全部是否被選中或不重要。舉一個例子, 假設預計數量是0,但如果它被選中,那麼我必須顯示那個元素。 它會工作過濾器:{isSelected:'!false'}但它只會顯示所選記錄的權利? – Felixerity

+0

您可以刪除isSelected:'!false'以僅隱藏{ProjectedQuantityOnHand:0}元素。或者isSelected屬性還有其他一些功能? –

+0

耶也有其他的功能。我只發佈那些基於概念的代碼@hardy – Felixerity