La solution de Nathan Matthews n'a pas fonctionné pour moi, mais elle est tout à fait correcte mais il n'y a pas grand intérêt à trouver une solution de contournement:
Le point clé est: Le type de paramètres définis et toParamas 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 un paramètre dans un état comme suit, vous voulez dire que params est un tableau en raison de l'utilisation de "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Vous devez donc également passer toParams en tant que tableau comme celui-ci:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Et vous pouvez y accéder via $ stateParams en tant que tableau comme celui-ci:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
La meilleure solution consiste à 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 paramètres. Pour passer toParams à $ state.go, vous devez également utiliser object au lieu de array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
alors vous pouvez y accéder facilement via $ stateParams:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
tableau.