2014-05-22 27 views
11

Herhangi bir filtre kullanmadan tr'u tıklattığımda, array.splice() işlevim çalışır. Dizideki dizinler doğru sırada, array.splice() çalışır.AngularJS'de filtre ile diziden öğe nasıl kaldırılır?

Filtre etkinleştirildiğinde, dizideki Dizinler güncelleştirilmez ve hala aynı sıradadır. Yani array.splice() yanlış öğeyi kaldırır.

<span ng-click="orderP0 = 'statut_name'; reversePO=!reversePO">order</span> 

    <tr ng-repeat="project in projects | orderBy : orderPO : reverse track by $index" ng-click="remove($event,$index,projects)"> 
     <span class="label" ng-bind="project.statut_name"></span> 
    </tr> 

    $scope.remove = function($event,index,array){ 
     array.splice(index,1); 
    }; 

Dizide dizin nasıl güncellenir? Ya da doğru öğeyi nasıl kaldırılır?

+0

Sadece projeye işlevden geçemiyor musunuz? i.e. ng-click = "remove (proje)" –

cevap

7

En basit çözüm, çıkartma işlevinizi, dizin yerine projeye almak için değiştirmek olabilir.

$scope.remove = function(project){ 
    for(var i = $scope.projects.length - 1; i >= 0; i--){ 
     if($scope.projects[i].statut_name == project.statut_name){ 
      $scope.projects.splice(i,1); 
     } 
    } 
} 

Örnek Plunker: http://plnkr.co/edit/51SNVMQjG3dsmpYI5RyY?p=preview

+0

Çok teşekkür ederim! Mükemmel çalışıyor – Steffi

21

O indexOf kullanarak dizide elemanın mevcut pozisyondaki size projeleri üzerinde kesikler daha kolaydır.

$scope.remove = function(project){ 
    $scope.projects.splice($scope.projects.indexOf(project),1); 
} 

Bu şekilde, yalnızca geçerli projeyi kaldır işlevine geçmeniz gerekir.

<tr ng-repeat="project in projects | orderBy : orderPO : reverse track by $index" ng-click="remove(project)"> 
    <span class="label" ng-bind="project.statut_name"></span> 
</tr> 
+1

Büyük çözüm! Zarif ve verimli! Teşekkürler adamım. – Eduardo

+0

Bu kabul edilen yanıt olmalı, bu dizi boyunca döngü yapmak zorunda değil. – Tillman32

+0

Dostum, tüm gün bununla mücadele eden bir hayat kurtarıcısı –

İlgili konular