2016-07-13 10 views
1

ich eine Reihe von Umgebungsvariablen auf meinem Server, die ich über einen einfachen API-Aufruf erhalten:Umgebung einstellen Variablen als Konstanten in Angular

angular.module('app') 
    .factory('serverService', ['$resource', 
    function($resource) { 
     var base = '/api/server/'; 
     return $resource(base, {}, { 
     getConfiguration: {method: 'GET', url: base + 'configuration'} 
     }); 
    }]); 

ich dies mehr Controller in rufen:

var getConfiguration = function() { 
    serverService.getConfiguration().$promise.then(function(config) { 
    vm.config = config; 
    }); 
}; 

Ich brauche jetzt Zugriff auf Umgebungsvariablen in einer meiner anderen Fabriken. Ich weiß, ich könnte serverService injizieren und diesen Aufruf noch einmal innerhalb dieser Fabrik machen, aber das scheint eine schlechte Wahl zu sein.

Da sich meine Konfiguration niemals ändert (Konfiguration unterscheidet sich nur nach Umgebung [dev, staging, prod]) sollte ich diesen API-Aufruf einmal machen, wenn meine App das resultierende Objekt lädt und als Constant einstellt? Wenn ja, wie würde ich darüber gehen?

Antwort

0

Ich würde die Service-Methode das Versprechen zurückgeben, anstatt eine neue Abfrage auszuführen, unter der Annahme, dass diese Variable statisch ist. Dienste sind Singletons, daher sollte nur eine Abfrage durchgeführt werden. An dieser Stelle würde ich serverService umbenennen, um etwas passender zu sein, wie zum Beispiel ConfigurationService, das sich besser "injizieren" würde, wenn man es überall injizieren möchte.

angular.module('app') 
    .factory('serverService', ['$http', 
    function($resource) { 
     var base = '/api/server/'; 
     //Get data and peel off http request data 
     var configPromise = $http.get(base + 'configuration').then(function(response){return response.data}); 
     return { 
       getConfiguration: function(){ 
       return configPromise 
       } 
      }; 
     } 
    }]); 

-

var getConfiguration = function() { 
    serverService.getConfiguration().then(function(config) { 
    vm.config = config; 
    }); 
}; 

Option 2:

Wenn Sie die Konstante Server-Seite zugreifen können und dort im Lebenszyklus injizieren, können Sie app.constant verwenden. Dies ist eine bessere Lösung, da das Einladen eines weiteren AJAX-Aufrufs in den Bootstrap Ihrer App das Laden der Seite nur sehr viel langsamer verlangsamt. Diese Art von "Round Trip" Bootstrapping-Zyklus kann wirklich beginnen, sich zu addieren.

app.constant('config', ${configVar}) 
+0

Stimmen Sie mit Option 2 überein. –

Verwandte Themen