无法从Controller使用Angular服务

时间:2014-03-12 21:05:56

标签: ajax json angularjs

所以我做了大量的研究并阅读了很多教程,但我无法找到我想要完成的直接答案。

我只是试图访问存储在JSON-Generator.com上的JSON对象并将其粘贴在表格中并重复它。听起来很简单,但似乎有很多不同的方法可以做到这一点,所有的消息都省去了我需要的一条信息。

如果我控制台内的console.log eventsService它返回一个构造函数,如果我在console.log eventsService.data它返回undefined。

如何在我的控制器中访问$ http返回的数据?

// CONTROLLERS


app.controller('currentTradeshowsController', ['$scope', 'eventsService', function($scope, eventsService){


  $scope.events = eventsService.data;


}]);


    // SERVICES


app.service('eventsService',function($http){

  var eventsUrl = 'http://www.json-generator.com/j/bVWJaYaWoO?indent=4';


  $http({method: 'GET', url: eventsUrl}).
    success(function(data){
      // not sure what to write here....
      return data;

    })

    .error(function(){
      console.log('ah shit');
    })



});

1 个答案:

答案 0 :(得分:1)

首先,$http调用是异步的,因此您可能希望使用promises将数据正确加载到范围变量中

第二 - 您需要从服务中返回一些内容,使其在服务声明函数之外工作

<强>控制器

app.controller('currentTradeshowsController', function($scope, eventsService){
    eventsService.getData().then(function(data) {
        $scope.events = data;
    });
});

<强>服务

app.service('eventsService',function($http){
    var eventsUrl = 'http://www.json-generator.com/j/bVWJaYaWoO?indent=4';

    return {
        getData: function() {
            return $http.get(eventsUrl);
        }
    }
});

$http.get是GET请求的简写,它会返回一个承诺,因此您可以在控制器中将其与.then一起使用