Решение Натана Мэтьюза не сработало для меня, но оно полностью правильное, но нет смысла искать обходной путь:
Ключевой момент: Тип определенных параметров и toParamas $ state.go должен быть одним и тем же массивом или объектом с обеих сторон перехода между состояниями.
Например, когда вы определяете params в состоянии следующим образом, вы имеете в виду, что params является массивом из-за использования "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Также вы должны передать toParams как массив, например:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
И вы можете получить к ним доступ через $ stateParams в виде такого массива:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Лучшее решение - использовать объект вместо массива с обеих сторон :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Я заменил [] на {} в определении параметров. Для передачи toParams в $ state.go также следует использовать объект вместо массива:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
тогда вы можете легко получить к ним доступ через $ stateParams:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
массив.