Me gustaría compartir algunas variables como rutas base a lo largo de mi aplicación. Estas variables deben ser accesibles durante la configuración del módulo. Mi opinión fue que puedo usar una constante o un proveedor para eso.
Tengo varios módulos y cada uno tiene su propia configuración de enrutamiento. En estas configuraciones de enrutamiento, quiero acceder a algunas configuraciones, por ejemplo.
Esto funciona para la configuración del módulo de la aplicación, pero no para otras configuraciones del módulo (para los controladores en otros módulos sí lo hace), siempre obtengo "Proveedor desconocido: información 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>Supongo que me he perdido un pequeño detalle, ¿tienes una idea?
Su constante de info se define en su módulo myApp . Si entiendo su pregunta correctamente, le gustaría usar las constantes en otros módulos (por ejemplo, el módulo myApp.orders). Si es así, debe inyectar myApp en myApp.orders, pero parece que desea hacer lo contrario. Una solución es desacoplar las constantes en un módulo independiente e inyectarlo como una dependencia donde sea necesario.
angular.module('constants', []) .constant(...); angular.module('myApp', ['constants', 'myApp.orders']) ... angular.module('myApp.orders', ['constants']) ...No sé si mi solución es la más bonita, pero puse en mi index.html una definición de una CONFIGURACIÓN a la que hago referencia desde otros componentes. Genero mi index.html con el código del lado del servidor para poder establecer los valores cuando se inicia el programa. Es decir, uso index.cshtml, pero también puede ser index.php u otra tecnología. Así es como se ve mi 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>