2016-07-22 12 views
0

私は工場とサービスを持っています。工場はgetDriversDataで、サービスはcollectDriversです。このサービスでは、JSONファイルからデータを取得する必要があるため、$http.getを使用しました。私は、工場のデータを何らかの処理をするため、サービスからのデータを工場に送る必要があります。コードは次のとおりです。AngularJS:サービスと工場の間でデータを渡す方法は?

.service('collectDrivers', function($http) { 

    // Get JSON 
    $http.get('js/bib.json').success(function(response) { 
     console.log('ENTERING HTTP GET IN collectDrivers'); 
     console.log('RESPONSE DALAM collectDrivers', response); 

     // Put all response data into globalArray using loop 
     for(i = 0; i < response.length; i++) { 

      // If type is driver, put the uid in globalArray 
      if(response[i].type == 'driver') { 
       globalArray[i] = response[i].uid; 
      } 
     } 
    }); 
    return globalArray; 
}) 

.factory('processDriversData', function(collectDriversData) { 
    // I will be doing some processing in the collected data 
    // so I want to make sure it is already available in the 
    // globalArray 
    console.log('Content of globalArray: ', globalArray); 
}) 

問題は、globalArrayはまだ入力されていません。しかし、コントローラでglobalArrayを呼び出そうとすると、データがそこにあります。では、サービスから工場にデータをどのように渡すのですか?私は角度に新しいので、私が間違っている場合は、私に正しい方法を示してください。

+0

あなたの工場にあなたのサービスや*注入で 'getGlobalArray'方法*サービスを作成します。それから、 '$ scope.globalArray = collectDrivers.getGlobalArray();'。詳細情報:https://docs.angularjs.org/guide/di – DonJuwe

答えて

0

グローバルの必要はありません。非同期操作のため、コールバック/約束が必要です。以下は、コールバックを使用している:

サービス

.service('collectDrivers', function($http) { 

    function getData(callbacl) { 
    var globalArray = []; 
    // Get JSON 
    $http.get('js/bib.json').success(function(response) { 
     console.log('ENTERING HTTP GET IN collectDrivers'); 
     console.log('RESPONSE DALAM collectDrivers', response); 

     // Put all response data into globalArray using loop 
     for (i = 0; i < response.length; i++) { 

     // If type is driver, put the uid in globalArray 
     if (response[i].type == 'driver') { 
      globalArray[i] = response[i].uid; 
     } 
     } 
     return callback(globalArray); 
    }); 
    } 

}) 

は、工場出荷時:

.factory('processDriversData', function(collectDriversData) { 
    var globalArray; 
    collectDriversData.getData(function(data){ 
      globalArray = data; 
      console.log('Content of globalArray: ', data); 
    }) 

}) 
+0

これで問題は解決しません。 collectDriversData.getData()の外側にあるconsole.log(data)は、それでもまだ空です。私は値をとって他の関数呼び出しに入れることができるように、配列として工場で利用できるようにする必要があります。 – biborn

+0

更新を見ると、globalArrayからアクセスできます。 –

+0

console.log(globalArray); collectDriversData.getData()の外側はまだ未定義を返します。あなたはそれを自分でテストすることができます。コール内のconsole.logはデータを返しますが、それ以外の場合は動作しません。 – biborn

関連する問題