【问题标题】:Getting results twice when calling service with controller使用控制器调用服务时获得两次结果
【发布时间】:2016-01-19 09:40:56
【问题描述】:

我正在构建一个简单的控制器,其中还包括一个服务。该服务返回一个 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 附近,但具体原因我找不到。

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

【问题讨论】:

  • 有趣。我敢打赌控制器被初始化了两次。如果你把console.log('hi')放在控制器里,它会调用两次吗?
  • 真的!一段时间后修复它:)

标签: javascript angularjs angular-services angular-controller


【解决方案1】:

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

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

    }])

   // controller 

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

只有在看到此example时才调用服务

【讨论】:

  • 嘿,如果我删除这一行,我会收到以下错误:TypeError: RequestService.getData is not a function at new
  • @threxx 抱歉!更新了答案。需要在服务上设置功能。
  • 还是报这个错:this.getData is not a function
  • @threxx 添加了示例控制器调用并从this.getData 中删除了()
【解决方案2】:

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

【讨论】:

  • 我自己写的,它只有四个条目,所以不要认为问题出在 json
【解决方案3】:

您已将服务定义为工厂。

尝试一下:

.service 更改为.factory

或:

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

(正如@user2954587 所说)

【讨论】:

  • 在工厂试过了,还是双倍的结果
【解决方案4】:

试试这个

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

 }]);

【讨论】:

  • 当我这样做时,我仍然得到双倍的结果。太奇怪了
  • 你确定你的 json 文件只有一次吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多