AngularJS-получение констант модуля от контроллера


Я пытаюсь построить myApp.config модуль для хранения некоторых настроек для моего приложения, я написал конфиг.js file:

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

я добавил его в моем приложении.js (angular-seed):

angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'myApp.controllers', 'myApp.config']).

я добавил его в индекс.html файл, и теперь я пытаюсь выяснить, как получить его в моих контроллерах, я попытался:

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

но я получаю:

неизвестный поставщик: myApp.configProvider

Я, наверное, здесь что-то не так, есть идеи ?

4 68

4 ответа:

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

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

следует также отметить, что решение SimplGy означает, что объект' 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 константы передовой практикой здесь