La soluzione di Nathan Matthews non ha funzionato per me ma è totalmente corretta ma non ha molto senso raggiungere una soluzione alternativa:
Il punto chiave è: il tipo di parametri definiti e toParamas di $ state.go devono essere lo stesso array o oggetto su entrambi i lati della transizione di stato.
Ad esempio, quando definisci un parametro in uno stato come segue, significa che params è un array a causa dell'utilizzo di "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Quindi dovresti anche passare aParams come array in questo modo:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
E puoi accedervi tramite $ stateParams come array in questo modo:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
La soluzione migliore è usare l'oggetto anziché l'array su entrambi i lati :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Ho sostituito [] con {} nella definizione dei parametri. Per passare toParams a $ state.go dovresti anche usare object invece di array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
quindi puoi accedervi facilmente tramite $ stateParams:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
nell'array.