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

时间:2016-02-16 10:19:17

标签: javascript angularjs node.js rest express

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

1 个答案:

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