Ui-router angular para obter uma visão condicional
Estou fazendo uma pergunta semelhante a esta pergunta:Exibições da interface do usuário condicional da UI Router?, mas minha situação é um pouco mais complexa e não consigo obter a resposta fornecida para o trabalho.
Basicamente, eu tenho um URL que pode ser renderizado de duas maneiras muito diferentes, dependendo do tipo de entidade para a qual o URL aponta.
Aqui está o que estou tentando atualmente
$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'
});
Configurei uma resolução para buscar a entidade real de um serviço reparador. Tudo parece estar funcionando até que eu chegue à transiçãoTo com base no tipo.
A transição parece funcionar, exceto que a resolução é acionada novamente e a getEntity falha porque o ID é nulo.
Tentei enviar o ID para as chamadas transiçãoPara, mas ele ainda tenta fazer uma segunda resolução, o que significa que a entidade é buscada duas vezes no serviço de resto.
O que parece estar acontecendo é que, no manipulador onEnter, o estado ainda não mudou, portanto, quando a transição acontece, ele pensa que está passando para um estado totalmente novo, e não para um estado filho. Isso é mais evidenciado porque quando removo a entidade. do nome do estado na transição Para, ele acredita que o estado atual é raiz, e não local. Isso também me impede de usar 'go' em vez de transição para.
Alguma ideia?