Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inject constant to other modules config using Angular JS

I would like to share some variables like base paths throughout my application. These variables needs to be accessible during module configuration. My opinion was, that I can use a constant or provider for that.

I've got several modules and each one has it's own routing configuration. In these routing configurations, I want to access some settings for example.

This is working for the app-module-configuration but not for other module-configurations (for controllers on other modules it does), I always get "Unknown provider: info from myApp.orders".

var myApp = angular.module('myApp', ['myApp.orders']);    myApp.constant('info', {    version : '1.0'  });    myApp.config(function(info) {    console.log('app config: ' + info.version);  });    myApp.controller('MyController', function (info) {    console.log('controller: ' + info.version);  });    var orders = angular.module('myApp.orders', []);    // Remove comments to see it fail.    //orders.config(function(info) {  //  console.log('orders config: ' + info.version);  //});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>      <div ng-app="myApp" class="container" ng-controller="MyController">            </div>

I guess I have just missed out a little detail, do you have an idea?

like image 253
martinoss Avatar asked Feb 09 '15 17:02

martinoss


People also ask

How do I inject a module in AngularJS?

Injecting a value into an AngularJS controller function is done simply by adding a parameter with the same name as the value (the first parameter passed to the value() function when the value is defined). Here is an example: var myModule = angular. module("myModule", []); myModule.

Can we inject one controller into another controller in AngularJS?

You can't inject controllers into one another.

What is difference between config () and run () method in AngularJS?

This is typically where you would configure application-wide stuff, such as the $routeProvider. Stuff that needs to be configured before the services are created. Run blocks (registered with module. run() ) get executed after the injector has all the providers.

Can we have multiple modules in AngularJS?

Yes, you can define multiple modules in angularJS as given below. The modularization in AngularJS helps us to keep the code clarity and easy to understand, as we can combine multiple modules to generate the application.


2 Answers

Your info constant is defined in your myApp module. If I understand your question correctly, you'd like to use the constants in other modules (e.g. myApp.orders module). If so, then you need to inject myApp into myApp.orders, but it looks like you want to do the reverse. One solution is to decouple the constants into a standalone module, and inject it as a dependency where needed.

angular.module('constants', [])    .constant(...);  angular.module('myApp', ['constants', 'myApp.orders'])   ...  angular.module('myApp.orders', ['constants'])   ... 
like image 51
ikumen Avatar answered Nov 05 '22 09:11

ikumen


I don't know if my solution is the most pretty, but I put in my index.html a definition of a CONFIG that I reference from other components. I generate my index.html with server side code so I can set the values when the program starts. That is, I use index.cshtml but it just as easily be index.php or other technology. Here is what my index.html looks like:

....   <script type="text/javascript">     var usingMockDataGlobal = true;  </script>  ....   <script type="text/javascript">          (function () {             'use strict';              var configData = {                   codeCampType: 'angu',                  loggedInUsername: 'peter',                 mockData: usingMockDataGlobal             };             angular.module('baseApp').constant('CONFIG', configData);           })();     </script> 
like image 36
Peter Kellner Avatar answered Nov 05 '22 09:11

Peter Kellner