2015-08-27 39 views
0

我非常渴望帮忙。AngularJS - 从函数中调用http调用中的变量?

我有一个看起来像这样的功能:

$scope.getData = function(id) 
{ 
    $http.get('/url' + id).success(function (data) { 
     return data.a.b.c; 
    }); 
}; 

现在我在其他功能我有这样的事情:

$scope.obj= {}; 
     $scope.obj.name = $scope.user.displayName; 
     $scope.commentObj.id= $scope.id; 
     $scope.obj.blah = blah; 
     $scope.obj.otherDataThing = $scope.getUserProfileData($scope.commentObj.userId); 

现在这个变量从未得到设定,当我邮寄到url来创建mongo中的实际数据对象。它只是不显示。我知道它必须做到同步性,但我无法弄清楚。帮帮我!

在此先感谢

回答

0

只需设置myObj = datamyObj.prop = datamyObj.prop.push(data)或不管它是什么,你希望你的$http电话里面做。

function ... = (passed) { 
    $http.get('url' + passed).success(function (data) { 
     $scope.myObj = data; 
    }); 
} 
+0

我有一个额外的点,比如$ scope.myObj.something,当我尝试这个或任何东西。东西没有设置:(任何想法? – Jerry

0

使用约定

制作答应功能

function MyCoolFunction(passed) { 
    return $http.get('url' + passed)); //<-- return $http 
    //_____________________^__________ this should be comma (,) 
} 

然后调用它

$scope.obj= {}; 
$scope.obj.name = $scope.user.displayName; 
$scope.commentObj.id= $scope.id; 
//_________________^_____ assigning to id property but using $scope.commentObj.userId 
$scope.obj.blah = blah; 

MyCoolFunction($scope.commentObj.userId).then(function(successResponse){ // <-- success_callback  
     $scope.obj.otherDataThing = successResponse.a.b.c; // <-- assignment of result 
    }, function(errorResponse){ // <-- error callback 
     $scope.error = errorResponse.message || errorResponse; 
}); 
+0

这不工作,当我使用点符号像myObj.someproperty – Jerry

+0

它的工作原理!检查你的对象,把console.log无处不在,我举的例子是完全合法的 –

+0

@Tom if仍然没有固定,使得plunker/jsFiddle –

0

这是我要做的事。 我们使用推迟

在我的服务

:: productService.js

angular.module('appName') 
    .service('ProductService', function ($http, $q, $window) { 
     var base_url = $window.base_url; 

    this.get_products = function (data) { 
       var deferred = $q.defer(); 
       var where = data || {}; 
       $http 
        .get(base_url + '/item', { params: where }) 
        .then(function (response) { 
         deferred.resolve(response); 
        }, function (err) { 
         deferred.reject(err); 
        }); 

       return deferred.promise; 
      }; 

}); 

然后在控制器,你可以注入服务队,并通过

$scope.products = []; 
    ProductService 
     .get_products({ page: self.page }) 
       .then(function (resp) { 
        $scope.products = resp.a.b; 
        console.log(resp); 
        // success response 
       }, function (err) { 
        console.log(err); 
        // Error Response 
       }); 
0

端起来只是解决它得到它嵌套http调用。事情是这样的:

http.get = function ... 
    http.post = function... 

不能相信我没想到的,以前捂脸