从 $resource 获取数据时,AngularJS forEach 不起作用

标签 angularjs foreach

我的 AngularJs forEach 操作有问题。我想迭代我的资源服务并保存每个项目的 ID。我认为这一定很容易,但不知何故我就是想不出来。我最近的方法如下:

CIS.factory('Services', function($resource) {
return $resource('/CIS/webresources/service/');

});

function ServiceCtrl($scope, Services) {

$scope.ServiceResult = Services.query();

$scope.getIds = function() {
    angular.forEach($scope.ServiceResult, function(eachService) {
           console.log(eachService.id);        
    });

};

$scope.getIds();
}

但它在 forEach 大括号内没有执行任何操作。我很感谢任何建议。另外,获取 id 的其他方法也将受到赞赏。

最佳答案

听起来像 $scope.ServiceResult 返回 promise ,并且您在实际获取数据之前运行 forEach 。另一个问题应该是 query() 方法根本不返回任何内容。

所以我们将尝试这两种选择:

如果 $resource('/CIS/webresources/service/') 是异步的:

尝试更改您的工厂并调用方法,例如:

CIS.factory('Services', ['$resource','$q',  function($resource, $q) {
    var data = $resource('/CIS/webresources/service/'); 


       var factory = {
            query: function () {
                var deferred = $q.defer();              
               deferred.resolve(data);                
                return deferred.promise;
            }
        }
        return factory;
}]);

并在 Controller 中调用它:

          Services.query() // query() returns promise 
                        .then(function (result) {
                          angular.forEach(result, function(eachService) {
                           console.log(eachService.id);        
                            });
                        }, function (result) {
                            alert("Error: No data returned");
                        });

promise 代表一个 future 值,通常是异步操作的 future 结果,并允许我们定义一旦该值可用或发生错误时会发生什么。

这是 中的演示 Fiddle 可以帮助你

如果 $resource('/CIS/webresources/service/') 不是异步:

CIS.factory('Services', ['$resource','$q',  function($resource, $q) {
    var data = $resource('/CIS/webresources/service/'); 

       var factory = {
            query: function () {               
                return data;                
            }
        }
        return factory;
}]);

和 Controller (像你的一样):

$scope.ServiceResult = Services.query();

$scope.getIds = function() {
   angular.forEach($scope.ServiceResult, function(eachService) {
       console.log(eachService.id);        
  });
};

相关示例: Fiddle

关于从 $resource 获取数据时,AngularJS forEach 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19464315/

相关文章:

javascript - AngularJS : Scope value changing, 但并不总是应用 ng-class

angularjs - 嵌套解析 : update a single item in a collection?

javascript - AngularJs 和套接字服务器

javascript - JS 将包含对象值的数组分配给对象键

java - 如何将 for-each 循环应用于字符串中的每个字符?

php - 将数组值从一页渲染到另一页

javascript - AngularJS - 点击事件(在指令中)在父级的任何地方被点击时触发

php - 最佳实践 : Store Large Form Values into Database

PHP 计算 foreach 循环中的行数

javascript - 缺少架构错误 : Schema hasn't been registered for model "Post"