Za pomocą ui-router
można wstrzyknąć kontroler $state
lub $stateParams
do kontrolera, aby uzyskać dostęp do parametrów w adresie URL. Jednak dostęp do parametrów za pośrednictwem $stateParams
ujawnia tylko parametry należące do stanu zarządzanego przez kontroler, który uzyskuje do niego dostęp, oraz jego stany nadrzędne, podczas gdy $state.params
ma wszystkie parametry, w tym te w stanach potomnych.
Biorąc pod uwagę następujący kod, jeśli bezpośrednio załadujemy adres URL http://path/1/paramA/paramB
, wygląda to tak, gdy ładują się kontrolery:
$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
}
Pytanie brzmi, skąd ta różnica? Czy istnieją wskazówki dotyczące najlepszych praktyk dotyczące tego, kiedy i dlaczego należy ich używać lub unikać?