无法通过AngularJS中的HTTP get调用返回JSON平面文件的结果

时间:2014-10-17 16:01:06

标签: javascript json angularjs angularjs-directive angularjs-service

我正在尝试从我的代码中删除一个硬编码数组,并将其转换为我可以随时替换的平面文件,因此我使用HTTP来执行此操作。

使用下面的代码,它不会以我可以在我的标记中迭代它的方式返回结构。此外,出于某种原因,当我看到Firebug并观看请求时,它似乎打了4次电话(!)。

var app = angular.module('MainEventApp', ['cloudinary']);
app.service('MainEventRepository', ['$http', function ($http) {

    this.$http = $http;

    this.getMainEvents = function () {
        return this.$http.get('/main_events.json').then(function(response) {
            return response;
        });
    }
}]);

app.controller("MainEventCtrl", ['$scope', 'MainEventRepository', function ($scope, MainEventRepository) {       
   $scope.main_events = MainEventRepository.getMainEvents();
}]);
  

main_events.json

[
    {
        "id": 1,
        "roman_numeral": "I",
        "name": "Hulk Hogan & Mr T vs Rowdy Roddy Piper & Paul Orndorff",
        "venue": "Madison Square Garden",
        "state": "New York",
        "attendance": 19121
    },
    ... and so on ...
]

我的标记:

ng-repeat='main_event in main_events'

2 个答案:

答案 0 :(得分:1)

在你的控制器中,完成承诺:

MainEventRepository.getMainEvents().then(function(data) {
    $scope.main_events = data;
});

此外,在您的服务中,从响应中返回data对象:

return response.data;

答案 1 :(得分:1)

您的服务中的$http电话会返回一个承诺,因此您需要在控制器中执行以下操作:

MainEventRepository.getMainEvents().then(function (data) {
    console.log(data);
    $scope.main_events = data;
});