Ich habe ein Beispiel erstellt, um zu zeigen, wie es geht. Aktualisierte state
Definition wäre:
$stateProvider
.state('home', {
url: '/:foo?bar',
views: {
'': {
templateUrl: 'tpl.home.html',
controller: 'MainRootCtrl'
},
...
}
Und das wäre der Controller:
.controller('MainRootCtrl', function($scope, $state, $stateParams) {
//..
var foo = $stateParams.foo; //getting fooVal
var bar = $stateParams.bar; //getting barVal
//..
$scope.state = $state.current
$scope.params = $stateParams;
})
Was wir sehen können, ist, dass das State Home jetzt eine URL hat, die wie folgt definiert ist:
url: '/:foo?bar',
Dies bedeutet, dass die Parameter in der URL als erwartet werden
/fooVal?bar=barValue
Diese beiden Links übergeben Argumente korrekt an den Controller:
<a ui-sref="home({foo: 'fooVal1', bar: 'barVal1'})">
<a ui-sref="home({foo: 'fooVal2', bar: 'barVal2'})">
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 deklarieren url
. Aber mit der params : {}
Konfiguration können wir diese Definition erweitern oder sogar Parameter einführen, die nicht Teil der URL sind:
.state('other', {
url: '/other/:foo?bar',
params: {
// here we define default value for foo
// we also set squash to false, to force injecting
// even the default value into url
foo: {
value: 'defaultValue',
squash: false,
},
// this parameter is now array
// we can pass more items, and expect them as []
bar : {
array : true,
},
// this param is not part of url
// it could be passed with $state.go or ui-sref
hiddenParam: 'YES',
},
...
Die für Parameter verfügbaren Einstellungen werden in der Dokumentation des $ stateProvider beschrieben
Unten ist nur ein Auszug
- value - {object | function =} : Gibt den Standardwert für diesen Parameter an. Dies setzt diesen Parameter implizit als optional ...
- array - {boolean =}: (Standard: false) Wenn true, wird der Parameterwert als Array von Werten behandelt.
- squash - {bool | string =}: squash konfiguriert, wie ein Standardparameterwert in der URL dargestellt wird, wenn der aktuelle Parameterwert mit dem Standardwert übereinstimmt.
Wir können diese Parameter so nennen:
// hidden param cannot be passed via url
<a href="#/other/fooVal?bar=1&bar=2">
// default foo is skipped
<a ui-sref="other({bar: [4,5]})">
Prüfen Sie es in Aktion hier
url:'.../home/:foo/:bar