Muszę przekazać i odebrać dwa parametry do stanu, w którym chcę przejść do korzystania ui-sref
z interfejsu użytkownika routera.
Coś podobnego używając poniższego linku do przechodzenia do stanu home
z foo
i bar
parametry:
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Odbieranie foo
i bar
wartości w kontrolerze:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Dostaję się undefined
do $stateParam
kontrolera.
Czy ktoś mógłby mi pomóc zrozumieć, jak to zrobić?
Edytować:
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
'A@home': {
templateUrl: 'a.html',
controller: 'MainCtrl'
},
'B@home': {
templateUrl: 'b.html',
controller: 'SomeController'
}
}
});
url:'.../home/:foo/:bar
'/:foo/:bar': {
swoją pustą trasę lub możesz również skonfigurować querystring.Odpowiedzi:
Stworzyłem przykład pokazujący, jak to zrobić. Zaktualizowana
state
definicja to:A to byłby kontroler:
Widzimy teraz, że stan domu ma teraz adres URL zdefiniowany jako:
co oznacza, że parametry w adresie URL są oczekiwane jako
Te dwa łącza poprawnie przekażą argumenty do kontrolera:
Ponadto kontroler pobiera
$stateParams
zamiast$stateParam
.Link do dokumentu:
Możesz to sprawdzić tutaj
params : {}
Pojawiło się również nowe , bardziej szczegółowe ustawienie
params : {}
. Jak już widzieliśmy, możemy zadeklarować parametry jako częśćurl
. Ale zparams : {}
konfiguracją - możemy rozszerzyć tę definicję lub nawet wprowadzić parametry, które nie są częścią adresu URL:Ustawienia dostępne dla parametrów są opisane w dokumentacji $ stateProvider
Poniżej znajduje się tylko wyciąg
Możemy tak nazwać te parametry:
Sprawdź to w akcji tutaj
źródło
url: "/:id?foo&bar"
Nie musisz koniecznie mieć parametrów w adresie URL.
Na przykład z:
Będziesz mógł wysłać parametry do stanu, używając:
Oczywiście, jeśli raz załadujesz stronę ponownie do
home
stanu, utracisz parametry stanu, ponieważ nie są one nigdzie przechowywane.Pełny opis tego zachowania jest udokumentowany tutaj , pod
params
wierszem wstate(name, stateConfig)
sekcji.źródło
Po prostu źle napisałeś
$stateParam
, powinno być$stateParams
(z s). Dlatego jesteś niezdefiniowany;)źródło