控制器中的过滤列表不起作用
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 id
、date
等),例如: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 的数据已经被获取,之后你可以过滤它。
我在 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 id
、date
等),例如: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 的数据已经被获取,之后你可以过滤它。