使用控制器调用service时获得两次结果

Getting results twice when calling service with controller

本文关键字:结果 两次 控制器 调用 service      更新时间:2023-09-26

我正在构建一个简单的控制器,其中还包括一个服务。这个服务返回一个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

我想,问题一定是在成功的某个地方,但是我找不到具体的原因。

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

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

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

只调用一次服务,你可以看到这个例子

试试这个

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)
        });
 }]);

您已经将您的服务定义为一个工厂。

尝试:

.service更改为.factory

或:

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

(如@user2954587所说)

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