Tworzę stronę opartą na kartach, która pokazuje pewne dane. Używam UI-Router w AngularJs do rejestrowania stanów.
Moim celem jest otwarcie jednej domyślnej karty podczas ładowania strony. Każda karta ma zakładki podrzędne i chciałbym, aby domyślna karta podrzędna była otwarta podczas zmiany zakładek.
Testowałem z onEnter
funkcją i używam wewnątrz, $state.go('mainstate.substate');
ale wydaje się, że nie działa z powodu problemów z efektem pętli (w przypadku state.go podstate wywołuje stan nadrzędny i tak dalej, i zamienia się w pętlę).
$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'}
})
Tutaj stworzyłem demo plunkera .
Na razie wszystko działa, z wyjątkiem tego, że nie mam otwartej domyślnej karty i właśnie tego potrzebuję.
Dziękuję za sugestie, opinie i pomysły.
$state.go(to.redirectTo, params, {location: 'replace'});
spowoduje to, że nowy stan zastąpi poprzedni stan (tj. Ten, z którego jesteśmy przekierowywani) w historii. Zobacz dokumentację $ state.go: angular-ui.github.io/ui-router/site/#/api/…'$stateChangeStart'
na'$stateChangeSuccess'
W rzeczywistości nawet jeśli to rozwiązanie zaproponowane przez Radima wykonało dokładnie swoją pracę, musiałem zapamiętać zakładkę podrzędną (stan) każdej zakładki.
Znalazłem więc inne rozwiązanie, które robi to samo, ale również pamięta każdy podstat karty.
Wszystko, co musiałem zrobić, to zainstalować dodatki ui-routera i użyć funkcji przekierowania głębokiego stanu :
$stateProvider .state('main.street', { url: '/main/street', templateUrl: 'main.html', deepStateRedirect: { default: { state: 'main.street.cloud' } }, });
Dziękuję Ci!
źródło
Od wersji 1.0 routera ui obsługuje
redirectTo
właściwość. Na przykład:.state('A', { redirectTo: 'A.B' })
źródło
Od wersji 1.0 ui-routera, domyślny punkt zaczepienia został wprowadzony przy użyciu IHookRegistry.onBefore (), jak pokazano w przykładzie Data Driven Default Substate w http://angular-ui.github.io/ui-router/feature-1.0/ interfaces / transit.ihookregistry.html # onbefore
// state declaration { name: 'home', template: '<div ui-view/>', defaultSubstate: 'home.dashboard' } var criteria = { to: function(state) { return state.defaultSubstate != null; } } $transitions.onBefore(criteria, function($transition$, $state) { return $state.target($transition$.to().defaultSubstate); });
źródło
$transitions.onBefore({ to: state => state.defaultSubstate != null }, trans => trans.router.stateService.target(trans.to().defaultSubstate));
app.config(function($stateProvider,$urlRouterProvider){ $urlRouterProvider.when("/state","/state/sub-state"); })
źródło
Jeśli ktoś przychodzi tu po odpowiedź jak zaimplementować proste przekierowanie na stan i jak mi się przydarzyło nie ma możliwości skorzystania z nowego routera ...
Oczywiście ponownie, jeśli możesz, odpowiedź @bblackwo jest świetna:
$stateProvider.state('A', { redirectTo: 'B', });
Jeśli nie możesz, po prostu ręcznie przekieruj go:
$stateProvider.state('A', { controller: $state => { $state.go('B'); }, });
Mam nadzieję, że to pomoże!
źródło