Рішення Натана Меттьюса не спрацювало для мене, але воно цілком правильне, але мало сенсу досягти рішення:
Ключовим моментом є: Тип визначених параметрів і toParamas $ state.go повинен бути однаковим масивом або об'єктом з обох сторін переходу стану.
Наприклад, коли ви визначаєте парами у такому стані, значить, парами є масивом через використання "[]":
$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'
})
Я замінив [] на {} у визначенні парам. Для переходу до Парами до $ 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
масиву.