Giải pháp của Nathan Matthews không hiệu quả với tôi nhưng nó hoàn toàn chính xác nhưng có rất ít điểm để đạt được một cách giải quyết:
Điểm mấu chốt là: Loại tham số được xác định và toParamas của $ state.go phải là cùng một mảng hoặc đối tượng trên cả hai mặt của quá trình chuyển đổi trạng thái.
Ví dụ: khi bạn xác định tham số trong trạng thái như sau, bạn có nghĩa là thông số là mảng vì sử dụng "[]":
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: ['index', 'anotherKey'],
controller: 'overviewController'
})
Vì vậy, bạn cũng nên truyền toParams dưới dạng mảng như thế này:
params = { 'index': 123, 'anotherKey': 'This is a test' }
paramsArr = (val for key, val of params)
$state.go('view', paramsArr)
Và bạn có thể truy cập chúng thông qua $ stateParams dưới dạng mảng như thế này:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams[0];
var anotherKey = $stateParams[1];
});
Giải pháp tốt hơn là sử dụng đối tượng thay vì mảng ở cả hai bên :
$stateProvider
.state('home', {
templateUrl: 'home',
controller: 'homeController'
})
.state('view', {
templateUrl: 'overview',
params: {'index': null, 'anotherKey': null},
controller: 'overviewController'
})
Tôi đã thay thế [] bằng {} trong định nghĩa params. Để chuyển toParams sang $ state.go, bạn cũng nên sử dụng đối tượng thay vì mảng:
$state.go('view', { 'index': 123, 'anotherKey': 'This is a test' })
sau đó bạn có thể truy cập chúng thông qua $ stateParams một cách dễ dàng:
app.controller('overviewController', function($scope, $stateParams) {
var index = $stateParams.index;
var anotherKey = $stateParams.anotherKey;
});
params
mảng.