Javascript 如何从$$状态对象获取数据

Javascript 如何从$$状态对象获取数据,javascript,angularjs,node.js,rest,express,Javascript,Angularjs,Node.js,Rest,Express,$scope.packgs始终以$$state对象结束,但如果我控制台响应它是我期望的正确对象数组,我做错了什么 我的控制器 routerApp.controller('PortalController', ['$scope', '$state', 'UserService', 'PackageService', function($scope, $state, UserService, PackageService) { $scope.isLoggedIn = UserService.isLo

$scope.packgs始终以$$state对象结束,但如果我控制台响应它是我期望的正确对象数组,我做错了什么

我的控制器

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;
  });
};

在当前情况下,您正在通过
$http.get
$scope.packgs
分配给promise return,这就是您在对象(它只是一个promise对象)中获取
$$state
的原因。此外,由于您希望在代码中使用console.log($scope.packgs)获取数据,因此无法获取
PackageService.get
callback
函数之外返回的数据(异步操作不会像您认为的那样以同步方式工作)

您实现
packages.get
方法的方式永远不会像您在controller方法中期望的那样返回数据。但是在您的
$http
呼叫的
.success
中是的,您正在服务
数据
变量中设置该值

除此之外,您的控制台中一定有错误,因为您正在尝试
.success
方法来处理由
PackageService.get返回的承诺,因为承诺中没有
.success
方法

PackageService.get($scope.currentUser()).then(function(data){
    $scope.packgs = PackageService.data; //assign data when ajax succeeded 
});
但我建议你采取比这更好的方法

如果您想从您的
PackageService
get
方法返回数据,要从promise本身返回数据,但在这种情况下,您需要使用
。然后使用
而不是
。成功
(回调没有能力返回数据)将遵循promise链

服务

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);
};
控制器

PackageService.get($scope.currentUser()).then(function(response){
     $scope.packgs = response.data; //received data returned by promise
     console.log($scope.packgs); //console will give data out here only
});

嘿,我仍然得到一个空的$scope.packgs我不知道是什么问题,还有什么我可以做错事吗你不能在json ajax调用之外获取console.log..它应该在成功回调内部。。