Здравствуйте! Кратко опишу ситуацию: есть проект, есть клиент, есть сервер. Проект разрабатывают разные люди, все синхронизируется через GIT. В проекте есть конфиг файл в котором содержатся URL для запросов к API. Для нормальной разработки нужно два конфига - с одним (
client.config.json: где все url запросов к API сервера заменены на URL статичных JSON файлов) работает fron-end разработчик, с другим (
server.config.json: где url как и должны быть - реальные url серверного API) работает другой разработчик. Ну и чтобы вся эта кухня работала есть один общий конфигрурационный файл (
config.json), где указано какой из двух конфигов грузить angular-приложению. Сделано это для нормальной работы с GIT, чтобы каждый раз можно было ничего не менять и файл
config.json не коммитить.
Возник такой вопрос: я хотел загружать конфиги как сервис-константу в angular:
var app = angular.module(...)
app.constant('ENV',config);
Но мне необходимо, чтобы конфиг загрузился до других модулей\сервисов\итд. Погуглив, я решил сделать resolve в конфигурации $routeProvider:
$routeProvider.when('/home', {
templateUrl: 'partials/home.html',
controller: 'HomePageCtrl',
activeTab: 'home',
resolve: { loadConf: loadEnvironmentConfig }
});
Функция loadEnvironmentConfig - загружает конфиг по вышеназванному алгоритму:
var loadEnvironmentConfig = function ($http) {
return $http.get('./config.json').then(function (resData) {
return $http.get('./'+resData.data.ENV+'.config.json').then(function (configData) {
var environmentConfig = {
NAME: resData.data.ENV,
CONFIG: angular.extend({},configData.data)
};
app.constant('ENV',environmentConfig); // Тут возникают проблемы
});
});
};
Но я столкнулся с одной неприятной проблемой: сервисы начинают инициализироваться до того, как сработает эта конструкция и инжектор зависимостей выдает ошибку, что модуль ENV не найден:
app.factory('Image', [ '$resource', 'ENV', function ($resource,ENV) {
return $resource(ENV.CONFIG.Image.url, {}, {
query: {method:'GET', params:{phoneId:'all'}, isArray:true}
});
}]);
Это можно как-нибудь исправить?
Я сделал так: вместо константы определил ENV как value:
app.value('ENV',{});
И загружаю его вот так:
var loadEnvironmentConfig = function ($http,ENV) {
return $http.get('./config.json').then(function (resData) {
return $http.get('./'+resData.data.ENV+'.config.json').then(function (configData) {
var environmentConfig = {
NAME: resData.data.ENV,
CONFIG: angular.extend({},configData.data)
};
angular.extend(ENV,environmentConfig);
});
});
};
Этот код запускается без ошибок, но мне не нравится, что ENV - не константа. Подскажите, можно ли как-нибудь сделать вариант с константой? Или может есть более адекватные способы для загрузки конфигурации? Заранее спасибо.