2016-04-26 3 views
-1

Entschuldigung für meine Sprachkenntnisse, hoffe, Sie verstehen alles.AngularJS: ng-Wiederholung, Filter und Index

Ich habe ein Problem mit ng-wiederholen und Daten filtern. Ich benutze $ index, um einige Daten von ng-repeat Daten zu bekommen. Zum Beispiel habe ich 20 Elemente. Wenn ich auf die dritte Schaltfläche klicke, ist der Index 3 und die Anwendung zeigt mir mehr Daten über das dritte Element an. Nun, wenn ich Filter verwende, funktioniert es nicht gut, becouse, wenn ich das letzte Element filter, und klicken Sie darauf, Index ist 0 und Anwendung zeigen mir mehr Daten über das erste Element. Was ich tun möchte, ist, wenn ich zum Beispiel 15. Element filtern und wenn ich darauf klicke, bekomme ich mehr Daten über 15. Element, nicht erst.

HTML:

.panel-body ng-repeat=("restaurant in restaurants | filter:search") ng-click="addRestaurant($index);" 
       a aria-expanded="true" data-parent="#accordion" data-toggle="collapse" style="font-size: 18px;" 
        i.fa.fa-chevron-right.pull-right.text-muted ng-show="$index == index" 
        | {{restaurant.name}} 

JS SCRIPT:

$scope.addRestaurant = (index) -> 
    $scope.index = index 
    $scope.selectedRestaurant = $scope.restaurants[$scope.index].id 
+1

warum nicht Schick einfach das Resta Das Objekt der Funktion 'ng-click =" addRestaurant (Restaurant) "zuweisen und dann benutzen? – war1oc

+0

Wo ist der Suchfilter definiert? Warum verwenden Sie dasselbe Element für Ihre Listen- und Detailansicht? Welche HTML (Vorlage?) Syntax ist das? – Markus

+0

@ war1oc danke, jetzt sende ich Restaurantobjekt. Ich habe paar Veränderungen in der Funktion gemacht und arbeite jetzt gut! –

Antwort

2

Warum Sie verwenden $ index? Sie können Sie bereits nur die Iteration Artikel

Verwenden

$scope.addRestaurant = (restaurant)... 
... 
ng-repeat=("restaurant in restaurants | filter:search") ng-click="addRestaurant(restaurant);" 

nicht mit $ index

in addRestaurant Funktion haben Restaurant geklickt