2014-09-15 10 views
33

Ich benutze ng-repeat um eine Sammlung von Werten anzuzeigen. Meine Filteroptionen ändern sich entsprechend einem Ajax-Aufruf an den Server. Wie kann ich die ng-Wiederholung aktualisieren, nachdem die Filterparameter empfangen wurden?AngularJS - refresh ng-repeat

js fiddle

Vorlage

<div> 
<div data-ng-controller="myCtrl"> 
    <ul> 
     <li data-ng-repeat="item in values | filter:filterIds()"> 
      <code>#{{item.id}}</code> Item 
     </li> 
    </ul> 
    </div> 
</div> 
<button ng-click="loadNewFilter()"> filter now</button> 

Angular

var app = angular.module('m', []); 

app.controller('myCtrl', function ($scope) { 
    $scope.values = [ 
    {id: 1}, 
    {id: 2}, 
    {id: 3}, 
    {id: 4}, 
    {id: 5}, 
    {id: 6} 
    ]; 

    $scope.filter = [1,2,3,4,5,6]; 

    $scope.filterIds = function (ids) { 
     return function (item) { 
      var filter = $scope.filter; 
      return filter.indexOf(item.id) !== -1;   
     } 
    } 

    $scope.loadNewFilter = function(){ 
    $scope.filter = [1,2,3];  
    } 
}); 

Antwort

34

Sie müssen Winkel sagen, dass die Werte haben Änderungen:

$scope.loadNewFilter = function(){ 
    $scope.filter = [1,2,3];  
    $scope.$apply(); 
} 
+0

, es nicht funktioniert, aussehen: [jsfiddle] (http://jsfiddle.net/6nssg30q/3/) – user1477955

+3

@ user1477955: http: //jsfiddle.net/6nssg30q/6/ Taste ist aus Umfang des Controllers. Es funktioniert jetzt – RahulB

+0

Dies löste ein Problem, das ich hatte, wenn das Hinzufügen von Elementen zu einem Array über einen Rückruf die ng-Wiederholung nicht automatisch aktualisiert. Aufruf von $ source. $ Apply(); direkt nach dem Hinzufügen eines neuen Elements verursacht es, um gut zu zeigen. –

1

Nach dem Empfang Ihres Filters namens $ scope. $ Apply() wie folgt: Es ist Ihren Bereich zu aktualisieren.

$scope.$apply(function() { 
    // your code 
}); 
6

Sie haben <button ng-click="loadNewFilter()"> filter now</button> aus Steuerungsbereich platziert.

4

In meinem Fall hatte ich einen TrackBy in meiner ng-Wiederholung und musste es entfernen, um es zu aktualisieren. Kein

+0

Genau das gleiche Problem für mich! Danke - Ich hätte Tracy niemals erwartet. * Ein * Problem * - Ich weiß nur, dass es Probleme vorher löst! – Dave

+0

@Meliodas können Sie $ index ohne trackBy verwenden –

Verwandte Themen