0

一切正常,但我无法从服务中获取资源。

我在下面有服务代码。

app.factory('myService', 
    function($rootScope, ResourceData) {
    var result = {};
    var data   = ResourceData.query();

    result.getData = function() {
        // problem here
    }

    return result;
});

和 CONTROLLER 包含代码。

app.controller('myController', ['$scope', 'myService', 
    function myController($scope, myService) {
       $scope.data = myService.getData();
});

我的问题是我的服务中是否有这样的功能

result.getData = function() {
   return data;
}

一切正常,但我需要在获取数据之前过滤该数据

如果我像这样更改正文,我会得到一个空数组,问题似乎来自 AngularJS。

如果我创建静态数组,它可以工作。

result.getData = function() {
   var arr = [];

        angular.forEach(data, function(item, key) {
              // simple filter
              if(item.ID > 10) {
                  return;
              }          
              else {
                  arr.push(item);
              }  
        });

        return arr;
}
4

1 回答 1

2

“ResourceData.query () ”的结果是异步的:

当数据从服务器返回时,对象是资源类的一个实例......重要的是要意识到调用 $resource 对象方法会立即返回一个空引用(对象或数组取决于 isArray)。从服务器返回数据后,现有参考将填充实际数据。

当页面第一次加载时,我猜测控制器在数据从服务器返回之前运行,所以第一次调用 getData() 时,data可能还没有填充任何数据,所以你得到一个空数组。

解决您的问题的一种方法是使用 Angular 过滤器过滤视图/HTML 中的数据,而不是在服务中。

<div ng-repeat="item in data | filter:myFilter">
   {{item.ID}}: {{item...}}
</div>

然后在你的控制器中:

$scope.myFilter = function(item) {
   return item.ID <= 10;
}
于 2013-01-02T04:04:41.247 回答