我的服务器上有一组环境变量,它们通过一个简单的API调用获得:

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


我在几个控制器中称其为:

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


现在,我需要访问其他工厂之一中的环境变量。我知道我可以注入serverService并在该工厂内再次进行此调用,但这似乎是一个糟糕的选择。

由于我的配置永远不会改变(配置仅因环境[dev,staging,prod]而异),我应该在应用加载时将这个API调用一次并将其设置为Constant吗?如果是这样,我将如何处理?

最佳答案

假设此变量是静态的,我将使service方法返回promise,而不是执行新的查询。服务是单例,因此只应查询一个。在这一点上,我将serverService重命名为更合适的名称,例如ConfigurationService,它将“感觉”更好地注入到任何地方。

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


选项2:

如果可以访问常量服务器端并将其注入生命周期中,则可以使用app.constant。这是一个更好的解决方案,因为在应用程序引导程序中引入另一个AJAX调用只会大大降低页面加载速度。这种“往返”引导周期确实可以开始加起来。

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

关于javascript - 在Angular中将环境变量设置为常量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38363132/

10-09 14:57
查看更多