2016-04-11 10 views
0

私はAngularJsにアプリケーションを持っています。 私はAPIのデータで初期化されたスコープ内の変数を持っています。 $scope.receivedRequests = CurrentUserData.incomeRequests();コントローラのフィルタリングリストが機能しない

原因のAPIに時間がかかりますが、開始時に$scope.receivedRequestsが空です。

$scope.receivedRequests私は、このデータはまた、フィルタリングされng-repeat

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

を使用しました。 しかし、ときに私が

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

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

$scope.pendingRequestsは常に空だったように、コントローラにこのフィルタリングを交換しようとしました。

コントローラのデータをフィルタリングするにはどうすればよいですか?


.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.recievedRequestsが見えるオブジェクトをどのように確認していないstatus : "Pending"

+0

filterByStatusフィルタコードと$ scope.recievedRequests配列を共有できますか。 – Thalaivar

答えて

0

この場合、私は約束を使用し、このようなコードを分割します。

工場サービス

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

コントローラ

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

    $scope.filteredArray = []; 

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

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

}) 

注:ここにトリックは、フィルタリングのfuを呼び出すことによって行われます

  • then()関数内での関数。この方法で、APIのデータが既にフェッチされていることを確認した後でフィルタリングできます。
0

$scope.receivedRequestsは一例として、文字列プロパティstatusを(ALOS iddateなど)は単なる要素の配列であり、 ...配列にkeyが関連付けられたState.pendingの値を送信しないでください。

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

$scope.pendingRequests = $scope.filterByStatus({key: State.PENDING})[0]; 
+0

"あなたの配列に関連するキーを使って" - これがどのように役立つか説明できますか? – demo

+0

あなたはフィーリングを作成することは可能ですか?あなたはfilteringByStatusです...なぜそれはあなたのコードが正しく動作している場所かもしれません。 – Thalaivar

+0

更新された投稿から、State.PENDINGは関連するキーステータスを持つ文字列値であるように見えますが、なぜオブジェクトとして渡されないのでしょうか。 – Thalaivar

関連する問題