2016-05-13 15 views
0

Ich habe ein Menü, eine Gruppe von Listen zur Liste:Winkelfilter und ng-click funktioniert nicht

<ul> 
    <li ng-repeat="group in getData"> 
    <a ng-click="groupId = group.id">{{group.id}}</a> 
    </li> 
</ul> 

Ein Klick auf das Element sollte groupId aktualisieren, aber anscheinend ist es nicht.

ich angelegt habe auch einen Filter, der den Wert aus dem groupId bekommt:

Data.query(function(data) { 
    $scope.getData = data; 
    $scope.currentGroup = $filter('filter')(data, {id: $scope.groupId}); 
    $log.debug($scope.groupId); 
    $log.debug($scope.currentGroup); 
}, function(reason) { 
    $log.error(reason) 
}); 

dass die folgende Liste sollte filtern mit dem ausgewählten groupId nur Artikel angezeigt werden: Jedoch

<tr ng-repeat="list in currentGroup.lists"> 
    <td>{{list.name}}</td> 
</tr> 

, es funktioniert auch nicht. Ich kann das korrekte Array in der Konsole protokollieren, aber die Tabelle zeigt keine Daten an.

Bitte sehen Sie sich diese Plunker an.

+0

Sie müssen eine Methode aufrufen, anstatt Werte in 'ng-click' zu geben. –

+0

@PraveshKhatri könnten Sie angeben Zum Beispiel, bitte? – brians69

Antwort

1

Es gibt mehrere Probleme mit Ihrem Code. Hier sind 2:

  1. ng-repeat schafft es eigenes Kind Umfang ist, also wenn Sie ng-click="groupId = group.id" tun, du zuweisen Sie das Kind Umfang des groupId, sollten Sie die Eltern gesetzt:

    <a ng-click="$parent.groupId = group.id">{{group.id}}</a> 
    

    aber das doesn‘ t so gut aussehen; versuchen Sie es mit dem as syntax, oder weisen Sie es aus einer Funktion.

  2. $filter gibt ein Array, so dass Sie das erste Element wählen Sie Ihre korrekt zuordnen currentGroup:

    $scope.currentGroup = $filter('filter')(data, {id: $scope.groupId})[0]; 
    

Hier ist ein Plunker mit diesen beiden Fest:

http://plnkr.co/edit/f9ylUZ9mpInB00zzlYQd?p=preview

+0

tks für das Beispiel! Weißt du, warum die Tabelle beim Klicken auf den Link nicht aktualisiert wird? sollte es nicht den Filter aktualisieren? – brians69

+0

@Drzbischof, warum sollte es? Ihr '$ filter' Code ist in einer Funktion, die nur einmal aufgerufen wird. –

+0

Ich sehe. Ich habe versucht, es außerhalb der Funktion aufzurufen, aber dann funktioniert es nicht, da $ scope.getData nicht definiert ist. Gibt es einen besseren Weg, dies zu tun? – brians69

1

In Ihrem Plunker können Sie es wie folgt

<table> 
    <tr ng-repeat="group in currentGroup"> 
     <td ng-repeat="list in group.lists">{{list.name}}</td> 
    </tr> 
</table> 

verwenden, da currentGroup

auch ein Array ist
+0

es funktioniert, danke! :) – brians69

+0

Bitte vote-up meine Antwort – sumair

+0

Ich habe gewählt, aber ich bin ein neuer Benutzer, zeigt es meine Stimme erst, nachdem ich 15 Punkte Ruf erhalten. – brians69