2014-06-24 58 views
0

我正在使用angularJS構建訪問http資源的工廠。我可以在請求附近看到本地返回的數據,但數據不會返回到控制器中。這裏是我的工廠:AngularJS:在控制器中返回未定義的值

myNameSpace.factory('simpleFactory', function ($http) { 
var factory = {}; 
var customers = []; 
factory.getCustomers = function() { 
    $http.jsonp('http://URL&callback=JSON_CALLBACK').success(function (data) { 
     customers = data; 
     return customers; 
    }) 
} 

return factory; 

});

我的控制器:

myNameSpace.controller('DetailsController', function ($scope, $http, simpleFactory) { 
var cust = simpleFactory.getCustomers(); 
$scope.CustomerData = simpleFactory.getCustomers(); 
console.log(cust); //The value that is display here is undefined 
}); 
+1

這是一個異步調用! – tymeJV

+0

請您詳細說明一下嗎? – user3486478

+0

該通話需要時間回來 - 因此,當該通話仍在進行中時,您的控制檯語句會被觸發 - 搜索從Angular工廠的異步通話中返回 – tymeJV

回答

3

的$ HTTP調用是一個Ajax的異步調用,這意味着你需要通過回調來發送結果。這可以幫助:

這裏的工廠:

myNameSpace.factory('simpleFactory', function ($http) { 
var factory = {}; 
factory.getCustomers = function (callback) { 
    $http.jsonp('http://URL&callback=JSON_CALLBACK').success(callback); 
} 

return factory; 

}); 

下面是如何使用它:

myNameSpace.controller('DetailsController', function ($scope, $http, simpleFactory) { 
    simpleFactory.getTopOffenders(function(offenders) { 
     $scope.topoffendersData = offenders; 
    }); 
}); 
+0

非常感謝您的幫助,它非常完美! – user3486478