控制器中的过滤列表不起作用

Filtering list in controller doesn't work

我在 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.receivedRequests 只是元素数组,具有字符串 属性 status(alos iddate 等),例如:status : "Pending"

我不确定你的 $scope.recievedRequests 对象是什么样子的,你能试试下面的吗...你为什么不发送 State.pending 值和关联的 key你的数组。

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

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

在那种情况下,我会使用 promises 并像这样拆分代码。

厂家服务

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
    //...
  }

})

备注:

  • 这里的技巧是通过在 then() 函数中调用过滤函数来完成的。这样你就可以确定来自 API 的数据已经被获取,之后你可以过滤它。