Ich habe ein Beispiel erstellt, um zu zeigen, wie es gemacht wird. Die 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; //fooVal abrufen
var bar = $stateParams.bar; //barVal abrufen
//..
$scope.state = $state.current
$scope.params = $stateParams;
})
Was wir sehen können, ist dass der Zustand home jetzt eine URL definiert hat als:
url: '/:foo?bar',
das bedeutet, dass die Parameter in der URL erwartet werden als
/fooVal?bar=barValue
Diese beiden Links geben die Argumente korrekt an den Controller weiter:
Außerdem verwendet der Controller $stateParams
anstelle von $stateParam
.
Link zur Dokumentation:
Sie können es hier überprüfen
params : {}
Es gibt auch eine neue, detailliertere Einstellung params : {}
. Wie bereits gesehen, können wir Parameter als Teil der url
deklarieren. Aber mit der Konfiguration params : {}
können wir diese Definition erweitern oder sogar Parameter einführen, die nicht Teil der URL sind:
.state('other', {
url: '/other/:foo?bar',
params: {
// hier definieren wir den Standardwert für foo
// wir setzen auch squash auf false, um das Einsetzen auch des Standardwerts in die URL zu erzwingen
foo: {
value: 'Standardwert',
squash: false,
},
// dieser Parameter ist jetzt ein Array
// wir können mehr Elemente übergeben und sie als [] erwarten
bar : {
array : true,
},
// dieser Parameter ist nicht Teil der URL
// er könnte mit $state.go oder ui-sref übergeben werden
hiddenParam: 'JA',
},
...
Einstellungen für Parameter sind in der Dokumentation des $stateProvider beschrieben
Im Folgenden ein Auszug:
- value - {object|function=}: gibt den Standardwert für diesen Parameter an. Dadurch wird dieser implizit als optional gesetzt...
- 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 identisch mit dem Standardwert ist.
Wir können diese Parameter folgendermaßen aufrufen:
// versteckter Parameter kann nicht über die URL übergeben werden
// Standard-Foo wird übersprungen
Sehen Sie es in Aktion hier