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