Is there a way in AngularJS to define constants with other constants? Is there a way in AngularJS to define constants with other constants? angularjs angularjs

Is there a way in AngularJS to define constants with other constants?


An easy way to do this is like this:

var myApp = angular.module("exampleApp",[]);myApp.constant('RESOURCES', (function() {  // Define your variable  var resource = 'http://127.0.0.1:8008';  // Use the variable in your constants  return {    USERS_DOMAIN: resource,    USERS_API: resource + '/users',    BASIC_INFO: resource + '/api/info'  }})());

And use the constants like this:

myApp.controller("ExampleCtrl", function(RESOURCES){  $scope.domain = RESOURCES.USERS_DOMAIN;});

Credits: link


The AngularJS way to define dependencies between Controllers, Services and others is by dependency injection (DI). So if you have a controller A that depends on a service B you would have to create it like this:

var myApp = angular.module("exampleApp",[]);myApp.controller("aCtrl", function(serviceB){    // Controller functionally here});

See, AngularJS will check the serviceB dependency and look for the service you created with that name. If you don't create one you will get an error.

So, if you want to create a constant A that depends on constant B, you would need to tell angular that A depends on B. But a constant can't have a dependency. A constant can return a function, but the DI won't work for the constant. Check this Fiddle so you can see for which methods DI work for.

So answering your question, you can't define a constant with other constants.

But you can do this:

angular.module('projectApp', [])  .constant('domain', 'http://somedomain.com')  .constant('api', '/some/api/info')  .service('urls', function(domain, api) {this.apiUrl = domain + api;})  .controller('mainCtrl',function($scope,urls) {      $scope.url = urls.apiUrl;  });

Check this fiddle to see it working:

If you want to understand more about DI, check out this post.


I do that this way:

var constants = angular.module('constants', []);constants.factory("Independent", [function() {   return {      C1: 42   }}]);constants.factory('Constants', ["Independent", function(I) {   return {      ANSWER_TO_LIFE: I.C1   }}]);