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

时间:2013-06-29 18:49:02

标签: javascript angularjs

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

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

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

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

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

4 个答案:

答案 0 :(得分:87)

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

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

答案 1 :(得分:71)

我认为最简单的方法是使用对象文字添加常量。这符合我认为的大多数应用程序配置用例,因为它支持复杂的配置对象。 constant步骤也会提前运行,before other providers已注册。

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
})

答案 2 :(得分:4)

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

cfg = { randomProperty: randomValue };

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

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

答案 3 :(得分:2)

检查此示例中常量的使用:

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常量良好做法的完整文章here