Rozwiązanie Nathana Matthewsa nie zadziałało dla mnie, ale jest całkowicie poprawne, ale nie ma sensu szukać obejścia:
Kluczowa kwestia to: Typ definiowanych parametrów i toParamas z $ state.go powinny być tą samą tablicą lub obiektem po obu stronach przejścia stanów.
Na przykład, kiedy definiujesz parametry w stanie w następujący sposób, oznacza to, że params jest tablicą, ponieważ używasz "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Więc również powinieneś przekazać toParams jako tablicę w następujący sposób:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Możesz uzyskać do nich dostęp poprzez $ stateParams w postaci tablicy w następujący sposób:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Lepszym rozwiązaniem jest użycie obiektu zamiast tablicy po obu stronach :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Zastąpiłem [] {} w definicji params. Aby przekazać toParams do $ state.go również powinieneś użyć object zamiast array:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
wtedy możesz łatwo uzyskać do nich dostęp przez $ stateParams:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
tablicy.