Я работаю над инструментом для построения диаграмм на основе angularJS и хочу создать настраиваемую пользователем конфигурационную систему - то есть значения по умолчанию загружаются из одного файла конфигурации, которые затем переопределяется, если существует другой файл конфигурации.Создание настраиваемой пользователем системы конфигурации в AngularJS
Вот что я до сих пор:
angular.module('axisJSApp')
.provider('configProvider', function() {
this.$get = function axisJSConfig($http, $q) {
var defaultConfig = $http.get('default.config.yaml');
var userConfig = $http.get('config.yaml');
return $q.all([defaultConfig, userConfig]).then(function(values){
var defaultConfigYaml = jsyaml.safeLoad(values[0].data);
var userConfigYaml = jsyaml.safeLoad(values[1].data);
return angular.extend(defaultConfigYaml, userConfigYaml);
});
};
});
Затем в мой контроллер:
angular.module('axisJSApp')
.controller('MainCtrl', function (configProvider, $scope) {
configProvider.then(function(appConfig){
console.dir(appConfig); // Config loaded, everything else happens.
});
});
Это все работает отлично, если оба default.config.yaml и config.yaml существуют. Мой вопрос: Как заставить $ q.all() терпеть неудачу изящно, если config.yaml
не существует?
Кроме того, есть ли способ синхронной загрузки конфигурационного файла, поэтому мне не нужно обертывать весь контроллер в .then()
?
Спасибо!
Это все очень полезно. Использование ngRoute - интересная идея, не считала это. Спасибо! – aendrew