2017-01-28 17 views
2

私のコードのこの特定の部分で数週間私の頭を傷つけていました。私が持っているものは、ajaxを介してデータを取得する単純なカスタムサービスです。次にポストプロセスを実行し、最後にそのデータをコントローラに戻したいと考えています。私のサービスが厳しくても、私のオブジェクトを正しく作成しています。角度 - コントローラにデータを戻さない単純なカスタムサービス

"deferred.promise"メソッドを使用しようとしましたが、コントローラにデータを返すようですが、何らかの理由でコントローラからアクセスできない$$状態のオブジェクトが返されているようです。これはまったく別の問題です。

データをコントローラに返すだけで済みますが、すべてのポストプロセスは私のサービスで処理する必要があります。これが可能なら誰でも知っていますか?

これは私が得たものです。

マイサービス:

var app = angular.module('myApp', []);  

app.factory('MyService', function($http, $q, $timeout){ 

    var My_Stored_Data = {} 

    return { 

     load_my_data_service: function(){ 

      $http({ 
       method: 'GET', 
       url: 'AJAX PATH', 
       headers: { "Accept": "application/json;odata=verbose;charset=utf-8"} 
      }).then(function(data){ 

       //post-process my data before returning it to the controller $scope.return_my_data_here 
       My_Stored_Data = data; 
       My_Stored_Data.data_result_1 = My_Stored_Data.data_result_1.split("\r\n"); 
       My_Stored_Data.data_result_2 = My_Stored_Data.data_result_2.split("\r\n"); 
       console.log(My_Stored_Data)//logs shows the that "My_Stored_Data" has processed my data correctly. 
       return My_Stored_Data //Return my data tot he controller $scope.return_my_data_here. 

      });  

     } 

    }    
}); 

マイコントローラ:

app.controller('MyController', function ($scope,$q,MyService) { 

    $scope.fetch_my_data = function(){ 

     $scope.return_my_data_here = MyService.load_my_data_service(); 

    } 
    $scope.fetch_my_data() //Initiate on page load 

}); 

答えて

2

@Ali Baigが正しいです。彼が指摘しているように、あなたは戻りが必要です。しかし返されるオブジェクトは約束であり、あなたが期待している生データではないため、これも必要です。

app.controller('MyController', function ($scope,$q,MyService) { 

    $scope.fetch_my_data = function(){ 

     // MyService.load_my_data_service() will return a promise. 
     $scope.return_my_data_here = MyService.load_my_data_service(); 

     // Use .then() to do something with that promise. 
     // NOTE: This code will run asynchronously. 
     $scope.return_my_data_here.then(function(data){ 
      $scope.actualData = data; 
      console.log($scope.actualData); 
     }); 
    } 
    $scope.fetch_my_data() //Initiate on page load 
}); 
+0

私はAli Baigの答えに対するコメントにこれを追加したでしょうが、十分な担当者がいません。 – Ynot

+0

私は離れていた、ちょうどそれを見た!あなたはスポットです! –

+0

実際に働いたうわー!これが数週間続いています。どうもありがとうございます! –

2

私はあなたがあなたのサービスの問題を解決しますちょうど$http({..

return { 

    load_my_data_service: function(){ 

     return $http({ 
      method: 'GET', 
      url: 'AJAX PATH', 
      headers: { "Accept": "application/json;odata=verbose;charset=utf-8"} 
     }).then(function(result){  
      return result.data; //to make it cleaner, just return the promise itself to your controller.. 
     });  

    } 

} 

この前にreturn文が欠落していると信じています。あなたのコントローラでは、

$scope.return_my_data_here = {}; 

MyService.load_my_data_service().then(function(data){ 
    var My_Stored_Data = data; 
    My_Stored_Data.data_result_1 = My_Stored_Data.data_result_1.split("\r\n"); 
    My_Stored_Data.data_result_2 = My_Stored_Data.data_result_2.split("\r\n"); 
    $scope.return_my_data_here = My_Stored_Data; 
}); 
+0

同じこと、my $ scopeはまだ空です。他のアイデア? –

+0

@DanielEllison今すぐ試してみて、変更を加えました。 –

関連する問題