所以我正在编写一个简单的应用程序,只返回每个州的人口普查数据。我有一个$ http请求获取两个JSON文件并将它们组合在一起。我在控制器中工作正常,但这似乎更适合我在服务中编写的东西,然后将服务中的数据注入控制器。但我无法弄清楚如何做到这一点。
这是我到目前为止所拥有的:
app.factory('stateData', ['$http','$q', function($http, $q) {
var combine;
var states = $http.get('js/data/states.json');
var rates = $http.get('http://api.census.gov/data/2013/acs1/profile?get=DP03_0128PE&for=state:*&key=b143975cec2fd367b0e0d73ba6417a6a47d097c7');
combine = $q.all([states,rates]).then(function(result) {
var combine = [];
var states, rates;
angular.forEach(result, function(response) {
combine.push(response.data);
});
states = combine[0],
rates = combine[1];
for(var s = 0; s < states.length; s++) {
for(var r = 0; r < rates.length; r++) {
if(states[s].code === rates[r][1]) {
states[s].rate = rates[r][0];
}
}
}
return states;
});
return combine;
}]);
app.controller('StatesCtrl', ['$scope','stateData', function($scope, stateData) {
$scope.states = stateData;
}]);
如果我跑console.log($scope.states)
我会回来:
Object {then: function, catch: function, finally: function}
很明显,在返回之前调用$ http的数据是个问题。
感谢您提供任何帮助。
答案 0 :(得分:2)
该服务返回一个承诺,因此您需要调用.then
并使用回调来设置$scope
值:
$scope.states = [];
stateData.then(function(data) {
$scope.states = data;
});