AngularJS - 从控制器获取模块常量

Asa*_*saf 70 javascript angularjs

我正在尝试构建一个myApp.config模块来存储我的应用程序的一些设置,我写了一个config.js文件:

angular.module('myApp.config', [])
    .constant('APP_NAME','My Angular App!')
    .constant('APP_VERSION','0.3');
Run Code Online (Sandbox Code Playgroud)

我把它添加到我的app.js(angular-seed):

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers', 'myApp.config']).
Run Code Online (Sandbox Code Playgroud)

我将它添加到index.html文件中,现在我试图找出如何在我的控制器中获取它,我试过:

angular.module('myApp.controllers', ['myApp.config'])
  .controller('ListCtrl', ['$scope', 'myApp.config', function($scope, $config) {
    $scope.printme = $config;
  }])
Run Code Online (Sandbox Code Playgroud)

但我得到了:

未知提供者:myApp.configProvider < - myApp.config

我可能在这里做错了什么,有什么想法吗?

mfe*_*lix 87

我不认为在这样的注射中使用模块名称是有效的.您可以通过名称简单地注入常量:

angular.module('myApp.controllers', ['myApp.config'])
  .controller('ListCtrl', ['$scope', 'APP_NAME', function($scope, appName) {
     $scope.printme = appName;
}]);
Run Code Online (Sandbox Code Playgroud)

  • 在Angular中获取配置文件(用于可自定义的设置)通常是一种明智的方法吗? (6认同)
  • 正确的是,有一个全局依赖注入空间,一旦你在任何模块中设置`.constant`,你可以在任何其他地方注入值. (4认同)

Sim*_*lGy 72

我认为最简单的方法是使用对象文字添加常量.这符合我认为的大多数应用程序配置用例,因为它支持复杂的配置对象.在其他提供商注册之前constant,该步骤也会提前运行.

angular.module('myApp').constant('cfg', {
  url: 'https://myapi.com/v1/',
  httpTimeout: 5000
})
Run Code Online (Sandbox Code Playgroud)

要使用它你只需注入cfg:

angular.module('myApp').factory('user', function(cfg, $http){
  // cfg and $http together at last
})
Run Code Online (Sandbox Code Playgroud)


Mat*_*t M 5

还应该注意的是,SimplGy 的解决方案意味着“cfg”对象是一个常量,但该对象的属性不是。这意味着,您不能像这样重新分配 'cfg':

cfg = { randomProperty: randomValue };
Run Code Online (Sandbox Code Playgroud)

您可以像这样重新分配“cfg”对象的属性:

cfg.url = 'BrandNewURL.com';
cfg.httpTimeout = 30;
Run Code Online (Sandbox Code Playgroud)