Mit ui-router
ist es möglich, entweder $state
oder $stateParams
in einen Controller zu injizieren , um Zugriff auf Parameter in der URL zu erhalten. Durch den Zugriff auf Parameter über werden jedoch $stateParams
nur Parameter verfügbar gemacht, die zu dem Status gehören, der von dem Controller verwaltet wird, der darauf zugreift, sowie zu den übergeordneten Status, während $state.params
alle Parameter vorhanden sind, einschließlich derjenigen in allen untergeordneten Status.
Wenn wir mit dem folgenden Code die URL direkt laden http://path/1/paramA/paramB
, geht das beim Laden der Controller folgendermaßen vor:
$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
}
Die Frage ist, warum der Unterschied? Und gibt es Best Practices-Richtlinien, wann und warum Sie diese verwenden sollten, oder vermeiden Sie die Verwendung einer dieser Richtlinien?