Проблема: Большой config()
Конфигурация моего приложения AngularJS растет довольно широко. Как бы вы реорганизовали следующее в отдельные файлы?
// app.js
angular.module('myApp')
.config(function($urlRouterProvider, $stateProvider, $httpProvider) {
// Configure routing (uiRouter)
$urlRouterProvider.when('/site', '/site/welcome');
$stateProvider.state('main', ...
...
// Configure http interceptors
$httpProvider.interceptors.push(function () {
...
});
});
Вариант 1. Несколько config()
s
Я знаю, что у меня может быть несколько config()
и поместить их в отдельные файлы следующим образом:
// app.js
angular.module('myApp');
// routerConfiguration.js
angular.module('myApp')
.config(function($urlRouterProvider, $stateProvider) {
// Configure routing (uiRouter)
$urlRouterProvider.when('/site', '/site/welcome');
$stateProvider.state('main', ...
...
// httpInterceptorConfig.js
angular.module('myApp')
.config(function($httpProvider) {
// Configure http interceptors
$httpProvider.interceptors.push(function () {
...
});
});
Что мне не нравится в этом, так это то, что в исходном app.js нет способа получить обзор того, что запускается при запуске.
Вариант 2. Вставить что-то
Я бы предпочел сделать что-то подобное, потому что было бы легче увидеть, что настроено, прямо в app.js. Однако я знаю, что это невозможно, поскольку мы не можем внедрять службы в config()
.
Могу ли я использовать поставщиков для решения этой проблемы? Есть ли лучший способ?
// app.js
angular.module('myApp')
.config(function(routerConfig, httpInterceptorConfig) {
routerConfig.setup();
httpInterceptorConfig.setup();
});
// routerConfig.js
angular.module('myApp')
.factory('routerConfig', function($urlRouterProvider, $stateProvider) {
return {
setup: function() {
// Configure routing (uiRouter)
$urlRouterProvider.when('/site', '/site/welcome');
$stateProvider.state('main', ...
...
}
};
});
});
// httpInterceptorConfig.js
angular.module('myApp')
.factory('httpInterceptorConfig', function($httpProvider) {
return {
setup: function() {
// Configure http interceptors
$httpProvider.interceptors.push(function () {
...
}
};
});
});