2016-07-22 19 views
0

Ich habe eine Fabrik und einen Service. Die Fabrik ist getDriversData und der Service ist collectDrivers. Im Dienst muss ich einige Daten aus einer JSON-Datei abrufen, also habe ich $http.get verwendet. Ich muss die Daten vom Service zur Fabrik senden, weil ich etwas Verarbeitung der Daten in der Fabrik mache. Die Codes sind wie folgt:AngularJS: Wie Daten zwischen Service und Fabrik übergeben werden?

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

Das Problem ist, wird die globalArray noch nicht gefüllt. Wenn ich jedoch versuche, das globalArray im Controller aufzurufen, sind die Daten vorhanden. Wie gebe ich die Daten vom Service an die Fabrik weiter? Ich bin neu zu eckig, also wenn ich falsch liege, zeige mir bitte den richtigen Weg.

+0

erstellen 'getGlobalArray' Methode in Ihrem Dienst und * injiziert * den Service in Ihre Fabrik. Dann nenne es z.B. '$ scope.globalArray = collectDrivers.getGlobalArray();'. Weitere Informationen: https://docs.angularjs.org/guide/di – DonJuwe

Antwort

0

Keine Notwendigkeit von globalen. Seit dem asynchronen Betrieb benötigen Sie Callback/Promise. Im Folgenden wird mit Rückruf:

Service

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

}) 

Fabrik:

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

}) 
+0

Dies löst das Problem nicht. Immer wenn ich console.log (Daten) außerhalb von collectDriversData.getData() trage, ist es immer noch leer. Ich brauche es in der Fabrik als ein Array, so dass ich den Wert nehmen und in andere Funktionsaufrufe einfügen kann. – biborn

+0

Sehen Sie das Update, jetzt können Sie über globalArray darauf zugreifen. –

+0

console.log (globalArray); außerhalb der CollectDriversData.getData() gibt immer noch undefined zurück. Sie können es für sich selbst testen. console.log innerhalb des Anrufs wird die Daten zwar zurückgeben, aber außerhalb davon wird es nicht funktionieren. – biborn

Verwandte Themen