С помощью 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
}
Вопрос в том, почему разница? И есть ли рекомендации по лучшим практикам, когда и почему вы должны использовать, или избегать использования любого из них?