Jeśli chcesz przekazać stan bez adresu URL, nie możesz używać url
podczas konfigurowania state
. Znalazłem odpowiedź na PR i trochę małpowałem, aby lepiej zrozumieć.
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
Następnie możesz przejść do niego w następujący sposób:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
Lub:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
A zatem w HTML:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
Ten przypadek użycia jest całkowicie ujawniony w dokumentacji, ale myślę, że jest to potężny sposób na przejście do stanu bez użycia adresów URL.
params
tablicy.{referer: true, param2: true, etc: true}
Rozwiązanie Nathana Matthewsa nie zadziałało dla mnie, ale jest całkowicie poprawne, ale nie ma sensu szukać obejścia:
Kluczowa kwestia to: Typ definiowanych parametrów i toParamas z $ state.go powinny być tą samą tablicą lub obiektem po obu stronach przejścia stanów.
Na przykład, kiedy definiujesz parametry w stanie w następujący sposób, oznacza to, że params jest tablicą, ponieważ używasz "[]":
Więc również powinieneś przekazać toParams jako tablicę w następujący sposób:
Możesz uzyskać do nich dostęp poprzez $ stateParams w postaci tablicy w następujący sposób:
Lepszym rozwiązaniem jest użycie obiektu zamiast tablicy po obu stronach :
Zastąpiłem [] {} w definicji params. Aby przekazać toParams do $ state.go również powinieneś użyć object zamiast array:
wtedy możesz łatwo uzyskać do nich dostęp przez $ stateParams:
źródło
params: {'index', 'anotherKey'},
wparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
przeciwnym razie to nie jest poprawnym obiektem javascriptWszystko, co musiałem zrobić, to dodać parametr do definicji stanu adresu URL w ten sposób
No!
źródło
/toState/:referer
składnią, jest użycie$location.path()
zamiast$state.go()
.Nie jestem pewien, czy będzie działać z AngularJS v1.2.0-rc.2 z ui-router v0.2.0. Przetestowałem to rozwiązanie na AngularJS v1.3.14 z ui-router v0.2.13.
Po prostu zdaję sobie sprawę, że nie jest konieczne przekazywanie parametru w adresie URL, jak zaleca gwhn.
Po prostu dodaj parametry z wartością domyślną w definicji stanu. Twój stan może nadal mieć wartość adresu URL.
i dodaj parametr do
$state.go()
źródło
Żaden z tych przykładów na tej stronie nie zadziałał dla mnie. To jest to, czego użyłem i działało dobrze. Niektóre rozwiązania mówią, że nie można łączyć url z $ state.go (), ale to nieprawda. Niezręczne jest to, że musisz zdefiniować parametry dla adresu URL, a także wymienić parametry. Obie muszą być obecne. Testowane na Angular 1.4.8 i UI Router 0.2.15.
w stanie dodaj parametry do końca stanu i zdefiniuj parametry:
W Twoim kontrolerze instrukcja go będzie wyglądać następująco:
Następnie wyciągnij parametry i użyj ich w kontrolerze nowego stanu (nie zapomnij przekazać $ stateParams do funkcji kontrolera):
źródło
W moim przypadku próbowałem ze wszystkimi podanymi tutaj opcjami, ale nikt nie działał poprawnie (angular 1.3.13, ionic 1.0.0, angular-ui-router 0.2.13). Rozwiązaniem było:
i w stanie. go:
Twoje zdrowie
źródło
Spędziłem dużo czasu walcząc z $ state & $ stateParams; Ionic / Angular;
Aby użyć $ state.go () i $ stateParams, musisz mieć pewne ustawienia, a inne parametry nie mogą być obecne.
W mojej app.config () zawarłem $ stateProvider i zdefiniowałem w nim kilka stanów:
params
Kluczem jest szczególnie ważne. Jak dobrze, zauważ, że nie maurl
kluczy ... wykorzystując stateParams i adresy URL NIE mieszają się. One wzajemnie się wykluczają.W wywołaniu $ state.go () zdefiniuj to następująco:
Te
index
ianotherKey
zmienne $ stateParams będzie tylko być wypełniane, jeżeli są one najpierw wymienione w $ stateControllerparams
określającego klucz.W kontrolerze uwzględnij $ stateParams, jak pokazano na ilustracji:
Przekazywane zmienne powinny być dostępne!
źródło
Spróbuj z
reload: true
?Najdłużej nie mogłem zrozumieć, co się dzieje - okazuje się, że oszukiwałem siebie. Jeśli jesteś pewien, że wszystko jest napisane poprawnie i będziesz chciał używać tego samego stanu, spróbuj
reload: true
:Mam nadzieję, że to oszczędza czas!
źródło
Miałem podobny problem. Skończyło się na działającym rozwiązaniu po wielu googlach, próbach i testach. Oto moje rozwiązanie, które będzie dla Ciebie odpowiednie.
Mam dwa kontrolery - searchBoxController i stateResultController oraz parametr o nazwie searchQuery który ma być przekazany z widoku posiadającego pole wyszukiwania do widoku pokazującego wyniki pobrane ze zdalnego serwera. Tak to się robi:
Poniżej znajduje się kontroler, z którego wywołujesz następny widok za pomocą
$state.go()
Poniżej znajduje się stan, który zostanie wywołany, gdy
$state.go()
zostanie wykonany:I na koniec kontroler powiązany ze
app.searchResults
stanem:źródło
A w moim przypadku stanu rodzic / dziecko. wszystkie parametry zadeklarowane w stanie potomnym muszą być znane przez stan nadrzędny
źródło
Rozwiązanie, do którego doszliśmy, gdy stan przyjmował 2 parametry, zmieniało się:
do
źródło
Zdefiniuj następujące w router.js
Twój kontroler musi dodać $ stateParams.
Możesz wysłać obiekt za pomocą parametru w następujący sposób.
źródło
Próbowałem przejść ze strony 1 do 2 i musiałem również przekazać pewne dane.
W moim routerze.js dodałem nazwę i wiek parametrów :
W Strona1 , onClick następnego przycisku:
Na stronie 2 mogłem uzyskać dostęp do tych parametrów:
źródło
Jeśli to jest parametr zapytania, który chcesz przekazać w ten sposób:
/toState?referer=current_user
wtedy musisz opisać swój stan w ten sposób:
źródło: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
źródło