Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS module.constant() : how to define a constant inside a module only?

On a page, I have several Angular modules. For each module I define a constant which contains the version of the module.

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

I though a constant was defined inside a module. But when I use the constant inside module1, the value I get is '2.0.0'...

Is there a way to define a constant (or anything else) which is proper to a module ?

Edit: for alternative solutions, could you please explain how to use it, for example in a controller declaration ?

module2.controller('myCtrl', function( $scope, $http, $q, ..., version ){
    // Here I can use the constant 'version'
}
like image 526
Eria Avatar asked Jan 18 '16 14:01

Eria


2 Answers

A very good question. I could think of a quick fix for this:

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

I don't know how much it suits your needs. But I hope it helps.

The main problem is the naming in Angular. You cannot have the same name for services/constants/values etc. They will be overwritten. I solved this problem with "namespaces" like I showed you above.

Example of injecting namespace like names: http://codepaste.net/5kzfx3

Edit:

For your example, you could use it like so:

module2.controller('myCtrl', ['$scope', '$http', '$q', ... , 'module2.version'], function( $scope, $http, $q, ..., version ){
    // Here I can use the constant 'version'
}
like image 141
Andrei CACIO Avatar answered Nov 15 '22 05:11

Andrei CACIO


That happens because module2 is overriding module1 constant.

You can use moduleName.version as a name, but it's not possible to use the same name.

like image 27
Serginho Avatar answered Nov 15 '22 04:11

Serginho