Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS从服务返回资源_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS从服务返回资源

Javascript AngularJS从服务返回资源,javascript,angularjs,Javascript,Angularjs,一切正常,但我无法从服务中获取来源 我有下面的服务代码 app.factory('myService', function($rootScope, ResourceData) { var result = {}; var data = ResourceData.query(); result.getData = function() { // problem here } return result; }); 和控制器包

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

我有下面的服务代码

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

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

    return result;
});
和控制器包含代码

app.controller('myController', ['$scope', 'myService', 
    function myController($scope, myService) {
       $scope.data = myService.getData();
});
我的问题是,如果我在我的服务中有这样的功能

result.getData = function() {
   return data;
}
一切正常,但我需要在获取数据之前对其进行过滤

如果我像这样改变body,我会得到一个空数组,问题似乎来自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;
}
“ResourceData.”的结果是异步的:

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

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

解决问题的一个方法是使用角度过滤器过滤视图/HTML中的数据,而不是在服务中

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

{{item.ID}:{{item…}
然后在控制器中:

$scope.myFilter = function(item) {
   return item.ID <= 10;
}
$scope.myFilter=函数(项){

return item.ID在angular.forEach中放入调试器语句,在控制台中查看加载时的数据。我说…如果将控制台调试放入angular.forEach,则为空数组,忽略forEach..如果我将forEach放在前面或结束,它工作正常,我不知道为什么要这样做,因为如果我直接调用change按钮,它会过滤正常..如果varify for source return true,但在foreach中看起来像null或其他东西。忽略foreachdata可能是一个对象,而不是一个数组…非常感谢您的帮助…我在控制器中创建了过滤器,工作正常!