2016-01-18 2 views
7

На странице у меня несколько Угловых модулей. Для каждого модуля я определяю константу, которая содержит версию модуля.AngularJS module.constant(): как определить константу внутри модуля?

var module1 = angular.module('module1').constant('version', '1.2.3'); 
var module2 = angular.module('module2').constant('version', '2.0.0'); 
... 

Я, хотя константа была определена внутри модуля. Но когда я использую константу внутри module1, значение, которое я получаю, равно «2.0.0» ...

Есть ли способ определить константу (или что-нибудь еще), которая подходит для модуля?

Редактировать: для альтернативных решений вы могли бы объяснить, как его использовать, например, в декларации контроллера?

module2.controller('myCtrl', function($scope, $http, $q, ..., version){ 
    // Here I can use the constant 'version' 
} 
+0

см., Если вы импортируете 'module2' как зависимость от' module1', в этом случае константа 'version' может превысить – nhd

+2

Возможный дубликат [Модули и конфликты имен/имен в AngularJS] (http: // stackoverflow. com/questions/13406791/modules-and-namespace-name-collision-in-angularjs) – Zakaria

ответ

6

Очень хороший вопрос. Я мог бы придумать быстрое решение для этого:

angular.module('module1').constant('module1.version', '1.2.3'); 
angular.module('module2').constant('module2.version', '2.0.0'); 

Я не знаю, насколько это соответствует вашим потребностям. Но я надеюсь, что это поможет.

Основная проблема - именование в угловом. Вы не можете иметь одно и то же имя для служб/констант/значений и т. Д. Они будут перезаписаны. Я решил эту проблему с «пространствами имен», как я показал вам выше.

Пример инъекционных имен как имена: http://codepaste.net/5kzfx3

Edit:

Для примера, вы можете использовать его так:

module2.controller('myCtrl', ['$scope', '$http', '$q', ... , 'module2.version'], function($scope, $http, $q, ..., version){ 
    // Here I can use the constant 'version' 
} 
+0

Как я могу вставить константу с точкой в ​​ее имени? (например, в контроллере внутри моего модуля) – Eria

+0

angular.module(). service (['module1.version'], function (version) {}); У вас могут быть псевдонимы. Также рекомендуется применять такие зависимости. Пример: http://codepaste.net/5kzfx3 –

+0

Выполнение того, что вы предлагаете для инъекции, дает мне следующую ошибку: 'Неизвестный поставщик: module1.infoProvider <- module1.info <- myCtrl' – Eria

1

Это происходит потому, что module2 является переопределением module1 постоянного ,

Вы можете использовать moduleName.version как имя, но нельзя использовать одно и то же имя.

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