Con ui-router
, è possibile iniettare $state
o $stateParams
in un controller per ottenere l'accesso ai parametri nell'URL. Tuttavia, l'accesso ai parametri tramite $stateParams
espone solo i parametri appartenenti allo stato gestito dal controllore che vi accede e ai suoi stati padre, pur $state.params
avendo tutti i parametri, inclusi quelli in eventuali stati figli.
Dato il seguente codice, se carichiamo direttamente l'URL http://path/1/paramA/paramB
, ecco come va quando vengono caricati i controller:
$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
}
La domanda è: perché la differenza? E ci sono linee guida sulle migliori pratiche su quando e perché dovresti usarle o evitare di usarle?