Die Lösung von Nathan Matthews hat bei mir nicht funktioniert, ist aber völlig korrekt, aber es macht wenig Sinn, eine Problemumgehung zu erreichen:
Der entscheidende Punkt ist: Der Typ der definierten Parameter und toParamas von $ state.go sollte auf beiden Seiten des Zustandsübergangs dasselbe Array oder Objekt sein.
Wenn Sie beispielsweise einen Parameter in einem Status wie folgt definieren, bedeutet dies, dass der Parameter aufgrund der Verwendung von "[]" ein Array ist:
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Daher sollten Sie auch Params als Array wie folgt übergeben:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Und Sie können über $ stateParams als Array wie folgt darauf zugreifen:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Eine bessere Lösung ist die Verwendung von Objekt anstelle von Array auf beiden Seiten :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Ich habe [] in der Parameterdefinition durch {} ersetzt. Um toParams an $ state.go zu übergeben, sollten Sie auch object anstelle von array verwenden:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
dann können Sie einfach über $ stateParams darauf zugreifen:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
Array aufgenommen werden.