ネイサンマシューズの解決策は私にとってはうまくいきませんでしたが、それは完全に正しいですが、回避策に到達する意味がほとんどありません。
重要な点は次のとおりです。定義されたパラメーターのタイプと$ state.goのtoParamasは、状態遷移の両側で同じ配列またはオブジェクトである必要があります。
たとえば、次のように状態で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'
})
params定義で[]を{}に置き換えました。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
配列に含める必要があります。