У меня есть Угловое приложение, которое повторно использует те же шаблоны для нескольких местоположений. В URLs выглядеть примерно так:Обновление всех запросов api с использованием ui-router stateParams и перехватчика
/locations/location1/
/locations/location2/
/locations/location1/about
/locations/location2/about
И у меня есть установка состояния, которая устанавливает местоположение параметров, которые другие мои маршруты установить в качестве родителя:
$stateProvider
.state('root', {
url: '/locations/{location:[^/]*}',
abstract: true,
template: '<ui-view/>'
});
В пределах этих шаблонов страниц у меня есть несколько компонентов, сделать запросы API. То, что я хотел бы сделать, это перехват всех запросов HTTP к апи и предварять идентификатор местоположения на основе свойства местоположения в $ stateParams:
function apiInterceptor ($stateParams) {
return {
request: (config) => {
config.url = $stateParams.location + '/' + config.url;
return config;
}
};
}
module
.factory('apiInterceptor', apiInterceptor)
.config(function($httpProvider {
$httpProvider.interceptors.push('apiInterceptor');
}
К сожалению, это дает мне циклическую зависимость:
ng1UIRouter <- $stateParams <- apiInterceptor <- $http <- ng1UIRouter
Я верю, что могу обойти круговую зависимость, используя напрямую инжектор $, но я прочитал, что выполнение этой проблемы означает, что у вас, вероятно, есть какая-то проблема архитектуры. Есть ли лучший способ получить идентификатор местоположения без дублирования кода для отдельных запросов api?
Спасибо. Я фактически упомянул раствор инжектора в нижней части моего сообщения. Мне было интересно, есть ли лучший способ архитектовать решение. Круговые зависимости, по-видимому, свидетельствуют о том, что с вашим мышлением что-то пошло не так. – jhummel