วิธีแก้ปัญหาของ Nathan Matthews ไม่ได้ผลสำหรับฉัน แต่มันถูกต้องโดยสิ้นเชิง แต่มีจุดเล็ก ๆ น้อย ๆ ที่จะบรรลุวิธีแก้ปัญหา:
ประเด็นสำคัญคือประเภทของพารามิเตอร์ที่กำหนดและ 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'
})
ฉันแทนที่ [] ด้วย {} ในนิยามพารามิเตอร์ สำหรับการส่ง toParams ไปยัง $ state.go คุณควรใช้ object แทน array:
$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
อาร์เรย์