Я задаю аналогичный вопрос на этот вопрос: условный ui-интерфейс UI-маршрутизатора?, но моя ситуация немного сложнее, и я не могу получить предоставленную ответ на работу.
В принципе, у меня есть URL-адрес, который может отображаться двумя разными способами, в зависимости от типа объекта, на который указывает URL-адрес.
Вот что я сейчас пытаюсь сделать
$stateProvider
.state('home', {
url : '/{id}',
resolve: {
entity: function($stateParams, RestService) {
return RestService.getEntity($stateParams.id);
}
},
template: 'Home Template <ui-view></ui-view>',
onEnter: function($state, entity) {
if (entity.Type == 'first') {
$state.transitionTo('home.first');
} else {
$state.transitionTo('home.second');
}
}
})
.state('home.first', {
url: '',
templateUrl: 'first.html',
controller: 'FirstController'
})
.state('home.second', {
url: '',
templateUrl: 'second.html',
controller: 'SecondController'
});
Я установил Resolve для извлечения фактического объекта из резервной службы. Кажется, что все работает, пока я не перейду на переход на основе этого типа.
Кажется, что переход работает, за исключением того, что происходит повторный вызов разрешения, и getEntity терпит неудачу, потому что идентификатор является нулевым.
Я попытался отправить идентификатор на вызовы перехода, но затем он все еще пытается выполнить второе решение, то есть объект дважды извлекается из службы останова.
Похоже, что в обработчике onEnter состояние еще не изменилось, поэтому, когда переход происходит, он думает, что он переходит в совершенно новое состояние, а не в дочернее. Это еще раз подтверждается, потому что когда я удаляю объект. от имени состояния в transitionTo, он считает, что текущее состояние является корневым, а не домашним. Это также мешает мне использовать "go" вместо перехода.
Любые идеи?