您好我的服务代码是:
angular.module('lucho1App').factory('ApiExample', ['$http', '$q', function($http, $q) {
return {
promiseToHaveData: function() {
return $http.get('http://data.colorado.gov/resource/4ykn-tg5h.json').then(function(response) {
var result = response.data;
console.log(result);
return result;
}, function(response) {
console.log('Error has ocurred');
});
}
};
}]);
我的控制器是:
angular.module('lucho1App')
.controller('MainCtrl',['$scope', 'ApiExample',function MainCtrl($scope,ApiExample) {
$scope.apiExampl=ApiExample.promiseToHaveData();
console.log($scope.apiExampl);
}]);
服务中的console.log显示输出,这意味着我的请求成功但在控制器中$scope.apiExampl
未定义我的错误在哪里?
答案 0 :(得分:1)
一个承诺是异步的,所以它将在稍后解决,然后将在那个时刻调用then中的函数。回调中的返回允许更改传递给下一个的对象然后调用,因为promise是可链接的对象。
首先,您必须在服务中返回promise对象:
return $http.get(...);
第二次改变你的控制器:
ApiExample.promiseToHaveData().then(function(data){
$scope.apiExampl=data;
});
请注意,我在这里=data
,因为在您的服务中,您已经从response
答案 1 :(得分:0)
你需要回复承诺
promiseToHaveData: function() {
return $http.get('http://data.colorado.gov/resource/4ykn-tg5h.json');
}
并处理控制器中的成功处理程序
ApiExample.promiseToHaveData().success (function(response) {
$scope.apiExampl = response.data;
console.log($scope.apiExampl);
});