Estou criando uma página baseada em guia que mostra alguns dados. Estou usando o UI-Router em AngularJs para registrar estados.
Meu objetivo é ter uma guia padrão aberta no carregamento da página. Cada guia possui subguias, e eu gostaria de ter uma subguia padrão aberta ao mudar de guia.
Eu estava testando com onEnter
função e por dentro estou usando, $state.go('mainstate.substate');
mas parece não funcionar devido a problemas de efeito de loop (em state.go para subestado, ele chama seu estado pai e assim por diante, e se transforma em um loop).
$stateProvider
.state('main', {
url: '/main',
templateUrl: 'main.html',
onEnter: function($state) {
$state.go('main.street');
}
})
.state('main.street', {
url: '/street',
templateUrl: 'submenu.html',
params: {tabName: 'street'}
})
Aqui eu criei uma demonstração do plunker .
Por enquanto, tudo funciona, exceto que não estou com a guia padrão aberta e é exatamente disso que preciso.
Obrigado por suas sugestões, opiniões e idéias.
$state.go(to.redirectTo, params, {location: 'replace'});
Isso fará com que o novo estado substitua o estado anterior (ou seja, aquele de onde estamos sendo redirecionados) no histórico. Veja os documentos de $ state.go: angular-ui.github.io/ui-router/site/#/api/…'$stateChangeStart'
para'$stateChangeSuccess'
Na verdade, mesmo que essa solução proposta por Radim fizesse exatamente o trabalho, eu precisava lembrar de cada subguia (estado) de cada guia.
Então eu encontrei outra solução que faz a mesma coisa, mas também lembra cada subestado de guia.
Tudo o que eu tive que fazer foi instalar ui-router-extras e usar o recurso de redirecionamento de estado profundo :
Obrigado!
fonte
A partir da versão 1.0 do ui-router, ele oferece suporte a uma
redirectTo
propriedade. Por exemplo:fonte
Desde a versão 1.0 do ui-router, um gancho padrão foi introduzido usando IHookRegistry.onBefore () como demonstrado no exemplo Data Driven Default Substate em http://angular-ui.github.io/ui-router/feature-1.0/ interfaces / transaction.ihookregistry.html # onbefore
fonte
$transitions.onBefore({ to: state => state.defaultSubstate != null }, trans => trans.router.stateService.target(trans.to().defaultSubstate));
fonte
Se alguém vier aqui para obter uma resposta sobre como implementar um redirecionamento simples para um estado e, como aconteceu comigo, não tiver a oportunidade de usar o novo roteador ...
Obviamente, se você puder, a resposta @bblackwo é ótima:
Se você não puder, basta redirecioná-lo manualmente:
Espero que ajude!
fonte