З ui-router
цим можна ввести $state
або $stateParams
в контролер, щоб отримати доступ до параметрів у URL-адресі. Однак доступ до параметрів здійснюється $stateParams
лише через параметри, що належать до стану, керованого контролером, який здійснює доступ до нього, та його батьківських станів, при цьому $state.params
має всі параметри, в тому числі в будь-яких дочірніх станах.
З огляду на наступний код, якщо ми безпосередньо завантажуємо URL-адресу http://path/1/paramA/paramB
, так це відбувається, коли контролери завантажують:
$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
}
Питання в тому, чому різниця? І чи є вказівки щодо найкращих практик щодо того, коли і навіщо слід використовувати, чи уникати використання будь-якого з них?