La solución de Nathan Matthews no funcionó para mí, pero es totalmente correcta, pero no tiene mucho sentido llegar a una solución alternativa:
El punto clave es: Tipo de parámetros definidos y toParamas de $ state.go debe ser la misma matriz u objeto en ambos lados de la transición de estado.
Por ejemplo, cuando define los parámetros en un estado de la siguiente manera, significa que los parámetros son una matriz debido al uso de "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Por lo tanto, también debe pasar aParams como una matriz como esta:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Y puede acceder a ellos a través de $ stateParams como una matriz como esta:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Una mejor solución es usar un objeto en lugar de una matriz en ambos lados :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Reemplacé [] con {} en la definición de parámetros. Para pasar toParams a $ state.go también debe usar object en lugar de array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
entonces puede acceder a ellos a través de $ stateParams fácilmente:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
matriz.