Хотя это очень старый вопрос, я бы хотел опубликовать решение, которое я сейчас использую. Надеюсь, это поможет кому-то в будущем. После использования некоторых разных подходов я придумал красивую диаграмму , написанную Джоном Папой
. Он предлагает использовать специальную службу routerHelperProvider
и настраивать состояния как обычный объект JS. Я не собираюсь копировать весь провайдер здесь. Подробнее см. Ссылку выше. Но я покажу, как я решил свою проблему с помощью этой службы.
Вот часть кода этого провайдера, который берет объект JS и преобразует его в конфигурацию состояний:
function configureStates(states, otherwisePath) {
states.forEach(function(state) {
$stateProvider.state(state.state, state.config);
});
Я преобразовал его следующим образом:
function configureStates(states, otherwisePath) {
states.forEach(function(state) {
var resolveAlways = {
translations: ['Translations', function(Translations) {
if (state.translationCategory) {
return Translations.get(state.translationCategory);
} else {
return {};
}
}],
};
state.config.resolve =
angular.extend(state.config.resolve || {}, resolveAlways || {});
$stateProvider.state(state.state, state.config);
});
});
И мой объект настройки маршрута теперь выглядит следующим образом:
{
state: ‘users’,
translationsCategory: ‘users’,
config: {
controller: ‘usersController’
controllerAs: ‘vm’,
url: ‘/users’.
templateUrl: ‘users.html'
}
Итак, что я сделал:
Я реализовал объект resolveAlways
, который принимает пользовательское свойство translationsCategory
, внедряет службу Translations
и разрешает необходимые данные. Теперь не нужно делать это каждый раз.