2014-09-15 9 views
33

Sto usando ng-repeat per visualizzare un insieme di valori. Le mie opzioni di filtro cambiano in base a una chiamata ajax al server. Come posso aggiornare la ng-repeat dopo aver ricevuto i parametri del filtro?AngularJS - refresh ng-repeat

js fiddle

Template

<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> 

angolare

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

risposta

34

Dovete dire angolare che i valori hanno cambiamenti:

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

No, non funziona, guarda: [jsfiddle] (http://jsfiddle.net/6nssg30q/3/) – user1477955

+3

@ user1477955: http: //jsfiddle.net/6nssg30q/6/ pulsante è fuori di scopo del controllore. Funziona ora – RahulB

+0

Questo risolve un problema che stavo avendo in cui l'aggiunta di elementi ad un array tramite un callback non aggiornava automaticamente la ng-repeat. Chiamando $ fonte. $ Apply(); subito dopo aver aggiunto un nuovo oggetto, è stato visualizzato correttamente. –

1

Dopo aver ricevuto il filtro chiamato $ scope. $ Apply() come segue: Aggiorna l'ambito.

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

Hai messo <button ng-click="loadNewFilter()"> filter now</button> fuori portata controllore.

4

Nel mio caso ho avuto una traccia nella mia ng-repeat e ho dovuto rimuoverla per farlo aggiornare.

+0

Proprio lo stesso problema per me! Grazie - non mi sarei mai aspettato che tracyBy * causasse * un problema - ho solo saputo che prima risolveva i problemi! – Dave

+0

@Meliodas puoi usare $ index senza trackBy –