我的 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/