Я разрабатываю проект с angularJS и ui-router для управления состояниями страниц.Для упрощения общая архитектура: страницы (состояния ui-маршрутизатора) разделены между «модулями» (тематическое расположение) следующим образом.
root
-> module1
-> state1
-> state2
-> module2
-> state1
-> state2
root
, module1
и module2
являются абстрактными (но с ними связана часть URL).
root.module1.state1
и root.module2.state2
должны иметь необязательный параметр в начале URL для контекста.
Идея состоит в том, чтобы создать следующие URL-адреса для контекстов:
root.module1.state1 : /#/:contextId/module1/state1
root.module1.state2 : /#/module1/state2
root.module2.state1 : /#/module2/state1
root.module2.state2 : /#/:contextId/module2/state2
Настройка поставщика реестра:
var root = {
name: 'root',
abstract: true,
url: '/:contextId',
params :{
contextId: {value:null, squash: true}
}
};
var module1 = {
name: 'module1',
parent: 'root',
abstract: true,
url: '/module1'
};
var module2 = {
name: 'module2',
parent: 'root',
abstract: true,
url: '/module2'
};
var mod1_state1 = {
name: 'module1.state1',
url: '/state1'
};
var mod1_state2 = {
name: 'module1.state2',
url: '/state2'
};
var mod2_state1 = {
name: 'module2.state1',
url: '/state1'
};
var mod2_state2 = {
name: 'module2.state2',
url: '/state2'
};
$stateRegistryProvider.register(root);
$stateRegistryProvider.register(module1);
$stateRegistryProvider.register(module2);
$stateRegistryProvider.register(mod1_state1);
$stateRegistryProvider.register(mod1_state2);
$stateRegistryProvider.register(mod2_state1);
$stateRegistryProvider.register(mod2_state2);
Ссылки основаныдля динамических значений, таких как:
<a ui-sref="module1.state1({contextId: $ctrl.contextId})">State 1</a>
Отлично работает при первой загрузке (сгенерированные hrefs для всех состояний хороши), но как только я обращаюсь к состоянию с contextId
в URL (разрешение значения),все ссылки преобразуются в /#/:contextId/moduleX/stateX
.
Есть ли способ избежать этого?И сохранить исходные сгенерированные ссылки на то, что они были при первой загрузке?
Или я что-то упускаю / есть другой способ добиться этого?
Примечание: пример только для иллюстрации того, чтоЯ пытаюсь достичь, но фактический проект намного больше, чем это.Следующие пункты невозможны:
- перемещение состояний между модулями
- дублирование кода на все модули или состояния, для которых требуется contextId