3

我正在构建一个简单的控制器,其中还包括一个服务。该服务返回一个 json。现在,我的问题是,当我通过控制器调用请求函数并打印出结果时,我得到所有对象两次。

所以这是我现在的代码:

angular.module('clientApp')
    .factory('RequestService', ['$http', function($http){

        function getData() {
            return $http.get('../../mockdata/data.json')
        }

        return {
            getData: getData
        };
    }]) 

    .controller('MainCtrl', ['RequestService', function(RequestService) {

        var data = [];

        RequestService.getData()
            .success(function(allData) {
                data = allData[0];
                console.log(allData)
            })

  }]);

json: http: //pastebin.com/dTcNDQeA

我想,问题一定出在 .success 附近,但我不知道具体原因。

我的解决方案:最后,当我在控制器中的服务调用周围包装一个函数时,它对我来说很好。还在想,为什么。

4

4 回答 4

2

尽量不要从您的服务中返回任何东西。

  .service('RequestService', ['$http', function($http){
        this.getData = function() {
           return $http.get('../../mockdata/data.json')
        }

    }])

   // controller 

   RequestService.getData().success(function(data){
      $scope.data = data;
   })

仅在看到此示例后才调用该服务

于 2015-10-20T16:13:53.760 回答
1

尝试这个

angular.module('clientApp')
.service('RequestService', ['$http', function($http){

    var getData = function (handler) {
        $http.get('../../mockdata/data.json').success(handler)
    }

    return {
        getData: getData
    };
}]) 

.controller('MainCtrl', ['RequestService', function(RequestService) {

    var data = [];

    RequestService.getData(function(allData) {
            data = allData[0];
            console.log(allData)
        });

 }]);
于 2015-10-20T16:17:29.853 回答
0

您已将服务定义为工厂。

尝试,要么:

更改.service.factory

或者:

this.getData = function () { ... }

(正如@user2954587 所说)

于 2015-10-20T16:19:45.547 回答
0

理想情况下,它应该返回单个对象。可能是您从后端获取的 JSON 有问题

于 2015-10-20T16:24:33.330 回答