A solução de Nathan Matthews não funcionou para mim, mas é totalmente correta, mas há pouco sentido em chegar a uma solução alternativa:
O ponto principal é: O tipo de parâmetros definidos e os toParamas de $ state.go devem ser o mesmo array ou objeto nos dois lados da transição de estado.
Por exemplo, quando você define um parâmetro no estado da seguinte maneira, significa que o parâmetro é matriz por usar "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Então você também deve passar paraParams como um array como este:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
E você pode acessá-los via $ stateParams como uma matriz como esta:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Uma solução melhor é usar objeto em vez de matriz nos dois lados :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Substituí [] por {} na definição de parâmetros. Para passar toParams para $ state.go, você também deve usar object em vez de array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
então você pode acessá-los via $ stateParams facilmente:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
matriz.