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

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

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

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

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

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

88175 次浏览

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

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

我认为最简单的方法是使用对象文字添加常量。我认为这符合大多数应用程序配置用例,因为它支持复杂的配置对象。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
})

还应该指出的是,SimpleGy 的解意味着‘ 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...
});