Вставить константу в конфигурацию других модулей с помощью Angular JS

Я хотел бы поделиться некоторыми переменными, такими как базовые пути в моем приложении. Эти переменные должны быть доступны во время конфигурации модуля. Мое мнение состояло в том, что я могу использовать для этого константу или поставщика.

У меня есть несколько модулей, каждый из которых имеет собственную конфигурацию маршрутизации. В этих конфигурациях маршрутизации я хочу, например, получить доступ к некоторым параметрам.

Это работает для конфигурации приложения-модуля, но не для других модулей-конфигураций (для контроллеров на других его модулях), я всегда получаю "Неизвестный поставщик: информация из 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>

Ответ 1

Ваша константа info определена в вашем модуле myApp. Если я правильно понял ваш вопрос, вы бы хотели использовать константы в других модулях (например, модуль myApp.orders). Если это так, тогда вам нужно ввести myApp в myApp.orders, но похоже, что вы хотите сделать обратное. Одним из решений является развязка констант в автономный модуль и при необходимости вставлять его в зависимость.

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

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

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

Ответ 2

Я не знаю, является ли мое решение самым красивым, но я ввел в свой index.html определение CONFIG, которое я ссылаюсь на другие компоненты. Я генерирую свой index.html с кодом на стороне сервера, поэтому я могу установить значения при запуске программы. То есть я использую index.cshtml, но это так же легко, как index.php или другие технологии. Вот как выглядит мой 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>