AngularJS从服务返回资源

时间:2013-01-01 17:27:21

标签: javascript angularjs

一切正常但我从服务中获取来源时遇到问题。

我的服务代码如下。

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;
}

1 个答案:

答案 0 :(得分: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;
}