Dengan ui-router
, dimungkinkan untuk menyuntikkan salah satu $state
atau $stateParams
ke pengontrol untuk mendapatkan akses ke parameter di URL. Namun, mengakses parameter melalui $stateParams
hanya mengekspos parameter milik negara yang dikelola oleh pengontrol yang mengaksesnya, dan status induknya, sementara $state.params
memiliki semua parameter, termasuk yang ada di status turunan apa pun.
Diberikan kode berikut, jika kita langsung memuat URL http://path/1/paramA/paramB
, begini jadinya ketika pengontrol memuat:
$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
}
Pertanyaannya adalah, mengapa berbeda? Dan apakah ada pedoman praktik terbaik tentang kapan dan mengapa Anda harus menggunakan, atau menghindari penggunaan salah satunya?