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常量良好实践的完整文章