我正在为app和内部服务使用https://github.com/StarterSquad/startersquad.github.com/tree/master/examples/angularjs-requirejs-2文件夹结构,我有以下代码:
define(['./module'], function(services) {
'use strict';
services.factory('user_resources', ['$resource', '$location', function($resource, $location) {
return $resource("", {},
{
'getAll': {method: "GET", url:'JSON/myList.JSON',isArray:true}
});
}]);
});
在控制器中我有以下代码:
define(['./module'], function (controllers) {
'use strict';
controllers.controller('myListCtrl',['Phone','Phone1','loginForm','$scope','$http','user_resources','CreditCard',function(Phone,Phone1,loginForm,$scope,$http,user_resources,CreditCard){
console.log(user_resources.getAll())
}]);
});
返回[$ promise:Object,$ resolved:false]如何从中获取数据?
我做了同样的事情 this tutorial,但在我的情况下,它返回promises,在教程中它直接返回数据
答案 0 :(得分:4)
请注意,$resource
会在从服务器检索数据之前立即返回对象。此对象具有名为$promise
的属性。当最终从服务器收到响应时,$promise
将得到解析,对象现在将包含数据。
在您的情况下,console.log()
输出打印它的作用,因为您在服务器有机会响应之前立即访问该对象。
您可以使用$resource
返回的对象执行以下操作:
1)在Angular表达式的视图中使用它。当$promise
自动解决后,您将无需更新即可更新视图。例如:
控制器:
$scope.users = user_resources.getAll();
HTML:
<ul>
<li ng-repeat="user in users">{{user.name}}</li>
</ul>
2)使用上面@doodeec建议的then()
函数,但语法正确:
user_resources.getAll().$promise.then(function(data) {
// do something with data
});
答案 1 :(得分:0)
如上所述,从所有$ http服务返回一个promise,您需要处理响应而不是执行。
此处可以看到类似问题和解决方案的示例:http://angularspot.com/topic/11-post-not-returning-data-to-controller
答案 2 :(得分:0)
请记住$ httpBackend.flush(),在此之前不会解决承诺。