Với ui-router
, có thể tiêm một $state
hoặc $stateParams
vào bộ điều khiển để có quyền truy cập vào các tham số trong URL. Tuy nhiên, việc truy cập các tham số thông qua $stateParams
chỉ hiển thị các tham số thuộc trạng thái được quản lý bởi bộ điều khiển truy cập vào nó và trạng thái cha của nó, trong khi $state.params
có tất cả các tham số, bao gồm cả các tham số ở bất kỳ trạng thái con nào.
Đưa ra đoạn mã sau, nếu chúng tôi tải trực tiếp URL http://path/1/paramA/paramB
, đây là cách nó diễn ra khi bộ điều khiển tải:
$stateProvider.state('a', {
url: 'path/:id/:anotherParam/',
controller: 'ACtrl',
});
$stateProvider.state('a.b', {
url: '/:yetAnotherParam',
controller: 'ABCtrl',
});
module.controller('ACtrl', function($stateParams, $state) {
$state.params; // has id, anotherParam, and yetAnotherParam
$stateParams; // has id and anotherParam
}
module.controller('ABCtrl', function($stateParams, $state) {
$state.params; // has id, anotherParam, and yetAnotherParam
$stateParams; // has id, anotherParam, and yetAnotherParam
}
Câu hỏi là, tại sao sự khác biệt? Và có những hướng dẫn thực hành tốt nhất xung quanh khi nào và tại sao bạn nên sử dụng, hoặc tránh sử dụng một trong số chúng?