Ich muss zwei Parameter an den Status übergeben und empfangen, zu dem ich mithilfe ui-sref
des UI-Routers wechseln möchte .
So etwas wie den Link unten verwenden, um den Status home
mit foo
und bar
Parameter zu ändern:
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Empfang foo
und bar
Werte in einer Steuerung:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Ich bekomme undefined
für $stateParam
in der Steuerung.
Könnte mir jemand helfen zu verstehen, wie ich es schaffen kann?
Bearbeiten:
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
'A@home': {
templateUrl: 'a.html',
controller: 'MainCtrl'
},
'B@home': {
templateUrl: 'b.html',
controller: 'SomeController'
}
}
});
javascript
html
angularjs
angular-ui-router
angular-ui
überspringen
quelle
quelle
url:'.../home/:foo/:bar
'/:foo/:bar': {
in Ihrer leeren Route oder Sie können es auch als Querystring einrichten.Antworten:
Ich habe ein Beispiel erstellt, um zu zeigen, wie es geht. Aktualisierte
state
Definition wäre:Und das wäre der Controller:
Was wir sehen können, ist, dass das State Home jetzt eine URL hat, die wie folgt definiert ist:
Dies bedeutet, dass die Parameter in der URL als erwartet werden
Diese beiden Links übergeben Argumente korrekt an den Controller:
Auch der Controller verbraucht
$stateParams
statt$stateParam
.Link zum Dokument:
Sie können es hier überprüfen
params : {}
Es gibt auch eine neue , detailliertere Einstellung
params : {}
. Wie wir bereits gesehen haben, können wir Parameter als Teil von deklarierenurl
. Aber mit derparams : {}
Konfiguration können wir diese Definition erweitern oder sogar Parameter einführen, die nicht Teil der URL sind:Die für Parameter verfügbaren Einstellungen werden in der Dokumentation des $ stateProvider beschrieben
Unten ist nur ein Auszug
Wir können diese Parameter so nennen:
Prüfen Sie es in Aktion hier
quelle
url: "/:id?foo&bar"
Sie müssen die Parameter nicht unbedingt in der URL haben.
Zum Beispiel mit:
Sie können Parameter an den Status senden, indem Sie entweder:
Wenn Sie die Seite einmal im
home
Status neu laden , verlieren Sie natürlich die Statusparameter, da sie nirgendwo gespeichert werden.Eine vollständige Beschreibung dieses Verhaltens finden Sie hier in der
params
Zeile imstate(name, stateConfig)
Abschnitt.quelle
Sie haben einfach falsch geschrieben
$stateParam
, es sollte sein$stateParams
(mit einem s). Deshalb wirst du undefiniert;)quelle