控制器AngularJs中的服务注入

时间:2016-06-06 13:18:29

标签: javascript angularjs angular-promise

您好我的服务代码是:

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未定义我的错误在哪里?

2 个答案:

答案 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);
});