控制器中的筛选列表没有'不起作用

Filtering list in controller doesn't work

本文关键字:不起作用 筛选 列表 控制器      更新时间:2024-05-11

我在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]);

CCD_ 5总是空的。

如何过滤控制器中的数据?


.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(也包括iddate等),例如:status : "Pending"

在这种情况下,我会使用promise并像这样分割代码。

工厂服务

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中的数据已经被提取,然后您可以对其进行过滤

我不确定你的$scope.receivedRequests对象看起来怎么样,你能试试下面的。。。为什么不将State.pending值与数组的相关key一起发送呢。

$scope.filterByStatus = function (statuses) {
        return $filter('filterByStatus')($scope.receivedRequests, statuses);
};
$scope.pendingRequests = $scope.filterByStatus({key: State.PENDING})[0];