Ответ 1
Существует новый рабочий плункер (расширение Angular UI-Router $urlRouterProvider.when не работает * больше *), который должен работать с версией 0.2.13+
Предыдущее решение
До версии 0.2.12-
мы могли бы использовать $urlRouterProvider.when()
, предложенную в документации (маленький цитат):
Как настроить дочернее состояние по умолчанию/индекс
...
если вы хотите, чтобы url parent.index был непустым, настройте перенаправление в вашем module.config с помощью $urlRouterProvider:
$urlRouterProvider.when('/home', '/home/index');
Итак, это было решение, показанное в Q и A, упомянутом выше:
var whenConfig = ['$urlRouterProvider', function($urlRouterProvider) {
$urlRouterProvider
.when('/app/list', ['$state', 'myService', function ($state, myService) {
$state.go('app.list.detail', {id: myService.Params.id});
}])
.otherwise('/app');
}];
...
app.config(whenConfig)
Теперь - мы не можем.
UI-Router "FIX" в 0.2.13
Это из-за "FIX" (о котором я просто не уверен), упомянутого в релизе 0.2.13
Исправления ошибок
$состояние:
-...
- Избегайте повторной синхронизации с URL-адресом после .transitionTo(b267ecd3, закрывает # 1573)
И вот новый код, добавленный в urlRouter.js:
if (lastPushedUrl && $location.url() === lastPushedUrl)
// this line stops the corrent .when to work
return lastPushedUrl = undefined;
lastPushedUrl = undefined;
Этот фрагмент кода оптимизирует/исправляет некоторые другие проблемы... но также отключает функциональность .when()
Решение
Как уже упоминалось, этот новый plunker показывает путь с версией 0.2.13+. Мы просто должны слушать изменение состояния, и если состояние "app.list", мы можем перейти к его деталям с некоторым id...
var onChangeConfig = ['$rootScope', '$state',
function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState) {
if (toState.name === "app.list") {
event.preventDefault();
$state.go('app.list.detail', {id: 2});
}
});
}]
Проверьте plunker здесь