Injecter constante sur d'autres modules de configuration à l'aide d'Angular JS

Je voudrais partager certaines variables comme les chemins de base tout au long de ma demande. Ces variables doivent être accessibles lors de la configuration du module. Mon opinion était que je peux utiliser une constante ou un fournisseur pour cela.

J'ai plusieurs modules et chacun possède sa propre configuration de routage. Dans ces configurations de routage, je souhaite accéder à certains paramètres par exemple.

Cela fonctionne pour la configuration du module de l'application, mais pas pour les autres configurations de modules (pour les contrôleurs sur les autres modules, il le fait), j'obtiens toujours "fournisseur inconnu: informations de 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> 

Je suppose que j'ai juste raté un petit détail, avez-vous une idée?

Votre constante d' info est définie dans votre module myApp . Si je comprends correctement votre question, vous souhaitez utiliser les constantes dans d'autres modules (par exemple, le module myApp.orders). Si oui, alors vous devez injecter myApp dans myApp.orders, mais il semble que vous voulez faire l'inverse. Une solution consiste à découpler les constantes dans un module autonome et à l'injecter en tant que dépendance si nécessaire.

 angular.module('constants', []) .constant(...); angular.module('myApp', ['constants', 'myApp.orders']) ... angular.module('myApp.orders', ['constants']) ... 

Je ne sais pas si ma solution est la plus jolie, mais j'ai mis mon index.html une définition d'un CONFIG que je fais référence à d'autres composants. Je génère mon index.html avec le code côté serveur afin que je puisse définir les valeurs lorsque le programme démarre. Autrement dit, j'utilise index.cshtml, mais il est aussi facilement index.php ou autre technologie. Voici comment appartient mon index.html:

 .... <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>