【问题标题】:How to get data from $$state object如何从 $$state 对象获取数据
【发布时间】:2016-05-27 13:36:24
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs node.js rest express


    【解决方案1】:

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

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

    除此之外,您的控制台中肯定有错误,因为您正在尝试 PackageService.get 返回的 promise 上的 .success 方法,因为 promise 中没有 .success 方法。

    PackageService.get($scope.currentUser()).then(function(data){
        $scope.packgs = PackageService.data; //assign data when ajax succeeded 
    });
    

    但我建议你选择比这更好的方法

    如果你想从 PackageServiceget 方法返回数据,从 Promise 本身返回,但在这种情况下你需要使用 .then 而不是 .success(callback don't have capability返回数据)将遵循承诺链。

    服务

    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..它应该在成功回调里面..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多