2014-05-22 3 views
11

Wenn ich auf tr ohne Filter klicke, funktioniert meine Funktion array.splice(). Indizes im Array sind in der richtigen Reihenfolge, so dass die array.splice() funktioniert.Wie kann man Elemente aus einem Array mit Filter in AngularJS entfernen?

Wenn der Filter aktiviert ist, werden die Indizes im Array nicht aktualisiert und sind immer noch in der gleichen Reihenfolge. So array.splice() entfernt das falsche Element.

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

Wie Index im Array aktualisieren? Oder Wie entfernt man den richtigen Gegenstand?

+0

Können Sie das Projekt nicht einfach an die Funktion übergeben? d. h. ng-click = "remove (project)" –

Antwort

7

Die einfachste Lösung wäre, Ihre Remove-Funktion zu ändern, um das Projekt anstelle des Index aufzunehmen.

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

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

+0

Vielen Dank! Es funktioniert super – Steffi

21

Es ist einfacher, Sie Projekte in der aktuellen Position des Elements in der Anordnung spleißbar indexOf verwenden.

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

Auf diese Weise müssen Sie nur das aktuelle Projekt an die Remove-Funktion übergeben.

<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

Tolle Lösung !!! Elegant und effizient! Danke Mann, wirklich. – Eduardo

+0

Dies sollte die akzeptierte Antwort sein, dies muss nicht durch das Array durchlaufen werden. – Tillman32

+0

Kumpel Du bist ein Lebensretter, der den ganzen Tag damit zu kämpfen hat –