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

Я, наверное, что-то неправильно делаю, какие-то идеи?

Ответ 1

Я не думаю, что верно использовать имя модуля в такой инъекции. Вы можете просто ввести константы по имени, хотя:

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

Ответ 2

Я думаю, что самый простой подход - добавить константу, используя литерал объекта. Я думаю, что это подходит для большинства случаев использования конфигурации приложения, поскольку он поддерживает сложный объект конфигурации. Шаг 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
})

Ответ 3

Следует также отметить, что решение SimplGy означает, что объект cfg является константой, однако свойства этого объекта не являются. Это означает, что вы не можете переназначить 'cfg' следующим образом:

cfg = { randomProperty: randomValue };

Вы можете переназначить свойства объекта 'cfg' следующим образом:

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

Ответ 4

проверьте использование констант в этом примере:

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 здесь