Estoy creando una página basada en pestañas que muestra algunos datos. Estoy usando UI-Router en AngularJs para registrar estados.
Mi objetivo es tener una pestaña predeterminada abierta al cargar la página. Cada pestaña tiene subpestañas, y me gustaría tener una subpestaña predeterminada abierta al cambiar de pestaña.
Estaba probando con la onEnter
función y en el interior estoy usando, $state.go('mainstate.substate');
pero parece que no funciona debido a problemas de efecto de bucle (en state.go para subestimar, llama a su estado principal y así sucesivamente, y se convierte en un bucle).
$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'}
})
Aquí creé una demostración de plunker .
Por ahora todo funciona, excepto que no tengo abierta la pestaña predeterminada y eso es exactamente lo que necesito.
Gracias por sus sugerencias, opiniones e ideas.
$state.go(to.redirectTo, params, {location: 'replace'});
Esto hará que el nuevo estado reemplace el estado anterior (es decir, el que estamos siendo redirigidos) en el historial. Ver la documentación sobre $ state.go: angular-ui.github.io/ui-router/site/#/api/...'$stateChangeStart'
a'$stateChangeSuccess'
De hecho, incluso si esta solución propuesta por Radim hizo exactamente el trabajo, necesitaba recordar la subpestaña (estado) de cada pestaña.
Así que encontré otra solución que hace lo mismo pero que también recuerda cada subestado de pestaña.
Todo lo que tenía que hacer era instalar ui-router-extras y usar la función de redireccionamiento de estado profundo :
¡Gracias!
fuente
A partir de la versión 1.0 del ui-router, admite una
redirectTo
propiedad. Por ejemplo:fuente
Desde la versión 1.0 de ui-router, se ha introducido un enlace predeterminado utilizando IHookRegistry.onBefore () como se muestra en el ejemplo de subestado predeterminado controlado por datos en http://angular-ui.github.io/ui-router/feature-1.0/ interfaces / transición.ihookregistry.html # onbefore
fuente
$transitions.onBefore({ to: state => state.defaultSubstate != null }, trans => trans.router.stateService.target(trans.to().defaultSubstate));
fuente
Si alguien viene aquí para obtener una respuesta sobre cómo implementar una redirección simple para un estado y, como me sucedió a mí, no tiene la oportunidad de usar el nuevo enrutador ...
Obviamente, nuevamente, si puede, la respuesta de @bblackwo es excelente:
Si no puede, simplemente redirija manualmente:
¡Espero que ayude!
fuente