2016-04-11 3 views
0

Ich habe Anwendung auf AngularJs. Ich habe Variable im Umfang, der mit Daten von API initialisiert wird. $scope.receivedRequests = CurrentUserData.incomeRequests();Filterliste im Controller funktioniert nicht

Ursache Anforderung an API dauert einige Zeit, $scope.receivedRequests ist beim Start leer.

$scope.receivedRequests Ich habe mit ng-repeat

<div class="full-row" ng-repeat="row in receivedRequests | filterByStatus:[State.PENDING] | partition:3 track by $index"> 

verwendet Diese Daten können auch gefiltert. Aber als ich versuchte, diese Filterung in den Controller zu ersetzen, wie

$scope.filterByStatus = function (statuses) { 
     return $filter('filterByStatus')($scope.receivedRequests, statuses); 
    }; 

    $scope.pendingRequests = $scope.filterByStatus([State.PENDING]); 

$scope.pendingRequests waren immer leer.

Wie kann ich Daten in der Steuerung filtern?


.filter('filterByStatus', function() { 
return function(arr, statuses) { 
    if (!arr) { return; } 
    return arr.filter(function(value) { 
     return statuses.some(function(val) { 
      return value.status == val; 
     }); 
    }); 
}; 

});

$scope.receivedRequests ist gerade Anordnung von Elementen, die String-Eigenschaft status haben (alos id, date etc.) als Beispiel: status : "Pending"

+0

Können Sie Ihren filterByStatus-Filtercode und Ihr $ scope.recievedRequests-Array teilen. – Thalaivar

Antwort

0

In diesem Fall würde ich Versprechungen verwenden und den Code wie folgt aufteilen.

Fabrik Service

app.factory('myService', function($http){ 
    return { 
    getRequests: function(){ 
     return $http.get('http://someurl'); 
    } 
    } 
}) 

-Controller

app.controller('myController', function(myService){ 

    $scope.filteredArray = []; 

    myService.getRequests() 
    .then(function(data){ 
     $scope.filteredArray = $scope.filterFunction(data); 
    }) 

    $scope.filterFunction = function(array){ 
    //function logic 
    //... 
    } 

}) 

Hinweise:

  • Der Trick hier durch den Aufruf der Filterung fu erfolgt nction innerhalb der then() -Funktion. Auf diese Weise können Sie sicher sein, dass die Daten aus der API bereits abgerufen wurden und anschließend können Sie sie filtern.
0

Ich bin nicht sicher, wie Ihr $ scope.recievedRequests Blick Objekt, können Sie die unten versuchen ... Warum senden Sie nicht den State.pending Wert mit einem zugehörigen key für Ihr Array.

+0

"mit einem zugeordneten Schlüssel für Ihr Array" - Können Sie erklären, wie dies helfen kann? – demo

+0

Ist es möglich, eine Geige zu erstellen ... Sie filternByStatus ... warum übergeben Sie es nicht als Ass-Array .. möglicherweise ist das, wo Ihr Code sich korrekt verhält. – Thalaivar

+0

Von Ihrem aktualisierten Beitrag scheint es State.PENDING ist ein String-Wert mit einem zugeordneten Schlüsselstatus, warum nicht übergeben Sie es als ein Objekt. – Thalaivar