Вставить константу в конфигурацию других модулей с помощью 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>