从Angular Controller访问Rails env变量

时间:2015-11-16 16:52:05

标签: javascript ruby-on-rails angularjs environment-variables

我有以下模块名为EnvConfigurationService,js.erb:

#../angular/services/config/EnvConfigurationService,js.erb

angular.module('mgApp.services').factory('EnvConfigurationService', function () {
return {
    getMySecretKey: function () {
        return "<%= ENV['MY_SECRET_KEY'] %>";
    }
  }
});

目的是提供访问MY_SECRET_KEY&#39;来自不同的角度和常规js类。与userController.js上的以下内容类似:

angular.module('mgApp.controllers').controller('userController', ['$scope', '$http', 'EnvConfigurationService', function($scope, $http, EnvConfigurationService) {
  var uri = EnvConfigurationService.getMySecretKey();
  ...
}]);

但是,返回的字符串始终为空。什么想法可能有什么不对/缺失?

提前致谢

1 个答案:

答案 0 :(得分:3)

This website shows 4 great ways to pass info from Rails to Angular

选项编号3指出,如果您要使用这样的插值,您可能需要调用此示例中显示的.html_safe

itemsApp.service('itemsAppInitializer', function(){
  return <%= @item.to_json.html_safe %>;
});

在我看来,如果你愿意的话,还有另外一种方法可以解决这个问题。我会在rails中创建一个路由,在响应中返回env变量。

然后,只要服务需要首次提供env变量,您就可以使用$http.get()并在服务调用中添加cache: true选项来从路由/控制器获取该数据,并且仅需要一次获取它。