3

サービスも含む単純なコントローラーを作成しています。このサービスは json を返します。さて、私の問題は、コントローラーを介してリクエスト関数を呼び出して結果を出力すると、すべてのオブジェクトが 2 回取得されることです。

だから、これは今私のコードです:

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 に答える