La solution de Nathan Matthews ne fonctionnait pas pour moi mais elle est totalement correcte mais il est inutile de chercher un contournement :
Le point clé est : Le type des paramètres définis et toParams de $state.go doit être le même tableau ou objet des deux côtés de la transition d'état.
Par exemple, lorsque vous définissez des params dans un état comme suit, vous signifiez que les params sont un tableau en utilisant "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Donc vous devez également passer toParams comme un tableau comme ceci :
params = { 'index': 123, 'anotherKey': 'Ceci est un test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Et vous pouvez y accéder via $stateParams comme un tableau comme ceci :
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Une meilleure solution est d'utiliser un objet au lieu d'un tableau des deux côtés :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
J'ai remplacé [] par {} dans la définition des params. Pour passer toParams à $state.go, vous devez également utiliser un objet au lieu d'un tableau :
$state.go('view', { 'index': 123, 'anotherKey': 'Ceci est un test' })
ensuite vous pouvez y accéder via $stateParams facilement :
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});