从 Angular 控制器访问 Rails 环境变量

Access Rails env variable from Angular Controller

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

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

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

目的是提供从不同的 angular 和常规 js 类 访问 'MY_SECRET_KEY'。在 userController.js 上点赞:

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

仍然,返回的字符串始终为空。有什么想法 wrong/missing?

提前致谢

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 中创建一个路由,在响应中为您提供 returns env 变量。

然后,每当服务需要首次提供环境变量时,您可以使用 $http.get() 并在服务调用中添加 cache: true 选项,以从 route/controller, 只需要取一次