我定义了以下工厂:
angular.module("account").factory("users",["$http",
function(a){
return {
getUser: function(){
return a.get("/user/me").then(function(r){
return r.data;
});
}
};
}
]);
还有我的 Controller :
angular.module("test.controllers",["account"])
.controller("TestCtrl",["$scope","users",
function(a,u){
a.user = u.getUser();
console.log(a.user);
}]);
这是控制台日志:
d {$$state: Object, then: function, catch: function, finally: function} $$state: Object status: 1 value: Object user: Object__v: 0 _id: "54c1fg29f36e117332000005" temp: "1ce3793175e0b2548fb9918385c2de09" __proto__: Object __proto__: Object __proto__: Object __proto__: Object
上面的代码返回一个状态对象而不是用户对象。 但是从日志来看,state对象在value范围内有user对象。我如何获得用户对象?还是我这样做完全错了?
我知道另一种方法是返回 $http.get 并在 Controller 中调用 then() 方法。但是我会经常使用用户对象,如果我在 Controller 中调用 then() 方法,它几乎与在控制器而不是工厂中使用 $http.get 相同。
最佳答案
JavaScript I/O 通常是异步的,在这种情况下也是如此。您的 getUser
调用返回一个 $q promise。为了打开它,你必须链接到它,然后这样打开它:
angular.module("test.controllers",["account"])
.controller("TestCtrl",["$scope","users",
function(a,u){
u.getUser().then(function(user){
a.user = user;
console.log(a.user);
});
}]);
如果您正在使用路由,您可能还想查看路由中的 resolve
选项。另见 this related question .
关于javascript - Angular http 返回 $$state 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146491/