2016-04-20 8 views
1

Ich versuche, die Best Practices Weg zum Abrufen meiner Konfigurationseinstellungen aus meiner Datenbanktabelle und verwenden Sie diese in meiner App. Ich benutze PHP Slim für die RESTful API. Ich bin mir nicht sicher, was ist besser? Verwenden Sie $ rootScope oder einen Dienst, und der beste Weg, um es anzugehen?Get Config Einstellungen aus der Datenbank zu teilen über App in eckig

Beispiel mit SLIM. Wenn ich alle Felder der configs Tabelle wollen betreibe ich dies in einem Controller:

Data.get('config').then(function(data){ 
    configs = data.data; 
}); 

zur Zeit habe ich einen Service, aber es funktioniert nicht:

app.factory('dataShare', function($rootScope, $log, $http, Data) { 

    var configs = {}; 

    Data.get('config').then(function(data){ 
    configs = data.data; 
    }); 

    return configs; 

}); 

Ich brauche jeder bekommen zu können, dieser Felder in meinem postCtrl.

+0

Gibt 'Data.get()' ein Objekt mit einer '$ promise' Eigenschaft zurück? – georgeawg

+0

Es verwendet SLIM für die HTTP-Anfrage. Data.get ('configs') ... ruft eine Anfrage an die Datenbank für die Konfigurationstabelle – Jason

+0

Ich löste das Problem q. Ihr Code fehlte $, aber ich bekomme immer noch undefined – Jason

Antwort

1

Ich habe ein paar Dinge von der vorherigen Antwort geändert, einschließlich der Darstellung, wie der Ausdruck aufgerufen werden sollte, da das asynchrone Verhalten in Ihrem Controller fortgesetzt wurde.

app.factory('dataShare', function($rootScope, $q, $log, $http, Data) { 

     var configs= {}; 
     configs.getconfigs=function(){ 
      var deferred = $q.defer(); 
      Data.get('config').then(function(data){ 
      deferred.resolve(data.data); 
      }); 
      return deferred.promise; 
     } 



    return configs; 
    }); 

sollte dann in der Lage sein, dies so lange in Ihrem Controller zu nennen, wie Sie q injiziert und die Seite dieser Controller steuert haben hat

<script src= "https://cdnjs.cloudflare.com/ajax/libs/q.js/2.0.3/q.min.js"></script> 

diese dann rufen.

dataShare.getconfigs().then(function(data){ 
    console.log(data); 
}); 
+0

deferred ist nicht definiert – Jason

+0

Entschuldigung, ich mache eine schreckliche Arbeit des Beweises, meine Antworten zu lesen, ich habe vergessen, $ q.defer() ursprünglich zurückzustellen. das passiert jetzt erste Zeile der Funktion. –

+1

FANTASTISCH! Danke! das hat funktioniert ... kannst du erklären, warum es so sein muss, damit ich es besser verstehen kann? – Jason

0

Sie zerstören Ihre Referenz.

Dann in Ihren Controllern/anderen Diensten, wo Sie Daten verwenden verwenden Sie sie wie dataShare.configs.

+0

Wenn ich versuche, etwas wie folgt auszuführen: '$ log.log ('get configs von postCtrl -' + dataShare.configs aufgerufen);' in postCtrl bekomme ich undefined – Jason