聽起來像$scope.ServiceResult
返回承諾,你運行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;
}]);
,並調用它的控制器:
Services.query() // query() returns promise
.then(function (result) {
angular.forEach(result, function(eachService) {
console.log(eachService.id);
});
}, function (result) {
alert("Error: No data returned");
});
A 承諾表示未來值,通常是異步操作的未來結果,並允許我們定義一旦此值變爲可用或發生錯誤時會發生什麼。
這裏是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;
}]);
和控制器(像你這樣):
$scope.ServiceResult = Services.query();
$scope.getIds = function() {
angular.forEach($scope.ServiceResult, function(eachService) {
console.log(eachService.id);
});
};
相關的例子:Fiddle
'$ resource('/ CIS/webresources/service /')'包含什麼? –