2013-06-29 3 views
65

Я пытаюсь построить модуль myApp.config для хранения некоторых параметров для моего приложения, я написал config.js файл:
AngularJS - Получение константы модуля из контроллера

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

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

+0

Асаф вы пытались внедрить модуль как зависимость в контроллере, который не будет работать. Модуль может быть зависимостью только от другого модуля. – Shivam

ответ

84

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

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

Правильно, есть одно глобальное пространство для инъекций зависимостей, как только вы настраиваете '.constant' в любом модуле, вы можете ввести значение где-нибудь еще. – jpsimons

+6

Как правило, разумный способ иметь конфигурационный файл (для настраиваемых параметров) в Angular? – Asaf

+0

@Asaf вы можете пойти со следующим сервисом .constant. 'angular.module ('app'). constant ('appSettings', {version: '1.0', appName: 'myApp'});' Затем введите его в контроллер или .config или что угодно, например 'угловое. module ('app'). controller ('simpleCtrl', ['appSettings', function (appSettings) {$ scope.valueInIsolatedScope = appSettings.version;}]) ' – hastrb

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

Именно то, что я искал! – Devner

+0

У меня есть постоянный провайдер с кодами клавиш, используемых для навигации, и я хотел бы добавить постоянный провайдер к контроллеру (я хочу, чтобы не вводить каждую запись отдельно). Это возможно? У меня есть несколько других услуг, которые уже были введены. – owczarek

+0

Это сложнее, чем: 'angular.module ('myApp'). Constant ('keyCodes', {left: 36, right: 38}) 'и:' angular.module (' myApp '). Factory (' myComponent ', function (keyCodes) {keyCodes.left}) '? – SimplGy

3

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

cfg = { randomProperty: randomValue }; 

Вы можете переназначить свойства «CFG» объект как так:

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

Это не отвечает на вопрос. Ответы на другие ответы должны быть написаны как комментарии. –

+0

@KenWayneVanderLinde Извинения Кен. К сожалению, я еще не собрал достаточное количество комментариев для комментариев, но я подумал, что важно, чтобы автор знал о проблемах, которые могут случиться с использованием константы Angulars 'Constant'. –

+0

@MattM Я думаю, что все в порядке. Все это в комментарий было бы невозможно. – carmenism

1

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

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

+0

roger, что @ryanyuyu спасибо –

Смежные вопросы