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

我试图build立一个myApp.config模块来存储我的应用程序的一些设置,我写了一个config.js文件:

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

我把它添加到我的app.js(angular种子):

 angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers', 'myApp.config']). 

我把它添加到index.html文件,现在我想弄清楚如何让它在我的控制器,我试过:

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

但我得到:

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

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

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

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

我认为最简单的方法是使用对象字面量来添加一个常量。 这符合我认为的大多数应用程序configuration用例,因为它支持一个复杂的configuration对象。 在其他提供者被注册之前 , constant步骤也提前运行。

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

要使用它,你只需要注入cfg

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

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

 cfg = { randomProperty: randomValue }; 

您可以重新分配“cfg”对象的属性,如下所示:

 cfg.url = 'BrandNewURL.com'; cfg.httpTimeout = 30; 

在这个例子中检查常量的使用:

 angular .module('abp001App', ['ngRoute']) .constant("myConfig", { "url": "http://localhost", "port": "80" }) .config(function ($routeProvider) { $routeProvider .when('/', { templateUrl: 'views/main.html', controller: 'MainCtrl' }) .otherwise({ redirectTo: '/' }); }) .controller('MainCtrl', function (myConfig) { // Do something with myConfig... }); 

在这里查看有关angularJs常量良好实践的完整文章