$ scope.packgs一直以$$状态对象结束但如果我控制响应它是我期待的正确对象数组,我做错了什么?
我的控制器
routerApp.controller('PortalController', ['$scope', '$state', 'UserService', 'PackageService', function($scope, $state, UserService, PackageService) {
$scope.isLoggedIn = UserService.isLoggedIn;
$scope.currentUser = UserService.currentUser;
$scope.logOut = UserService.logOut;
$scope.packgs = PackageService.get($scope.currentUser()).success(function(response){
return response;
});
/*if($scope.packgs === null){
$scope.errorMessage = "You are not tracking any packages, add some to your portal!";
}*/
console.log($scope.packgs);
}]);
我的工厂
packages.get = function(info){
return $http.get('/api/packages?owner='+info).success(function(data){
packages.data = data;
});
};
答案 0 :(得分:1)
在当前情况下,您将$scope.packgs
分配给$http.get
承诺返回,告诉您在对象中获取$$state
的原因(这只是一个承诺对象)。此外,您无法在PackageService.get
函数之外获取callback
返回的数据,因为您希望在代码中使用console.log($ scope.packgs)获取数据(异步操作不会以同步方式工作)如你想象的)。
您实现packages.get
方法的方式永远不会像控制器方法那样返回数据。但是,在您.success
来电的$http
中,您是在服务data
变量中设置该值。
除此之外,您的控制台中一定有错误,因为您正在尝试.success
承诺PackageService.get
方法,因为承诺中没有.success
方法
PackageService.get($scope.currentUser()).then(function(data){
$scope.packgs = PackageService.data; //assign data when ajax succeeded
});
但我建议你采取比这更好的方法
如果您想从get
的{{1}}方法返回数据,请从承诺本身返回,但在这种情况下,您需要使用PackageService
代替.then
(回调没有能力返回数据)将遵循承诺链。
<强>服务强>
.success
<强>控制器强>
packages.get = function(info){
//used .then over $http.get to follow promise chain pattern
return $http.get('/api/packages?owner='+info).then(function(response){
packages.data = response.data;
return data;
});
//or follow below one which is short and sweet
//return $http.get('/api/packages?owner='+info);
};