Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用控制器调用服务时获得两次结果_Javascript_Angularjs_Angular Services_Angular Controller - Fatal编程技术网

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

Javascript 使用控制器调用服务时获得两次结果,javascript,angularjs,angular-services,angular-controller,Javascript,Angularjs,Angular Services,Angular Controller,我正在构建一个简单的控制器,它还包括一个服务。此服务返回一个json。现在,我的问题是,当我通过控制器调用请求函数并打印结果时,我会两次得到所有对象 这就是我现在的代码: angular.module('clientApp') .factory('RequestService', ['$http', function($http){ function getData() { return $http.get('../../mockdata/dat

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

我想,问题一定出在成功的某个地方,但我不知道具体原因


我的解决方案:最后,当我在控制器中围绕服务调用包装一个函数时,它对我来说运行良好。仍然在想原因。

试着不要从您的服务中退回任何东西

  .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有问题

嘿,如果我删除这一行,我会得到以下错误:TypeError:RequestService.getData不是new@threxx的函数对不起!更新了答案。需要在服务上设置函数。仍然会出现此错误:this.getData不是function@threxx添加了示例控制器调用,还从
中删除了
()
。getData
当我这样做时,仍然会得到双重结果。这太奇怪了。你确定你的json文件只包含一次所有内容吗?我自己写的,它只有四个条目,所以不要认为问题出在json上。把它和工厂联系起来,仍然会得到两个有趣的结果。我打赌控制器被初始化了两次。如果将
console.log('hi')
放入控制器中,它是否调用了两次?true!一段时间后修复了:)