使用控制器调用服务时获取结果两次

时间:2015-10-20 16:10:34

标签: javascript angularjs angular-services angular-controller

我正在构建一个简单的控制器,它还包含一个服务。此服务返回一个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 个答案:

答案 0 :(得分:2)

尽量不要从您的服务中退回任何内容。

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

    }])

   // controller 

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

只有在看到此example

后才能调用该服务

答案 1 :(得分: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)
        });

 }]);

答案 2 :(得分:0)

您已将服务定义为工厂。

尝试:

.service更改为.factory

或:

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

(如@ user2954587所说)

答案 3 :(得分:0)

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