uirouter - ui router angularjs tutorial
Parámetros para estados sin URL en ui-router para AngularJS (3)
Estoy usando ui-router para representar estados en mi aplicación AngularJS. En él me gustaría cambiar el estado sin cambiar la URL (básicamente se actualiza una "vista detallada" pero esto no debería afectar la URL).
Utilizo <a ui-sref="item.detail({id: item.id})">
para mostrar los detalles, pero esto solo funciona si especifico una URL como url: "/detail-:id"
en my $stateProvider
.
Me parece que el estado actual solo se define a través de la URL.
Ahora descubrí que necesita usar la propiedad params: [''id'']
del estado para que la clave no se elimine cuando no se usa una URL.
Solo una información adicional para los nuevos interesados en esta publicación:
La declaración de params en una definición de estado ha cambiado a params: { id: {} }
de params: [''id'']
Así que ten en cuenta :)
Fuente: http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider
Gracias por su respuesta, me ayudó en la dirección correcta, pero me gustaría agregar una descripción más completa.
En mi problema específico, había un factor de complicación porque el estado al que necesitaba inyectar un parámetro que no era URL era un estado secundario. Eso complicaba las cosas un poco.
La parte params: [''id'']
va en la declaración $stateProvider
como esta:
$stateProvider.state(''parent'', {
url: ''/:parentParam'',
templateUrl: ''...'',
controller: ''...''
}).
state(''parent.child'', {
params: [''parentParam'',''childParam''],
templateUrl: ''...'',
controller: ''...''
});
Y el nombre del param está conectado al atributo ui-sref
así:
<a ui-sref=".child({ childParam: ''foo'' })">
Y la trampa es esta:
Si el estado padre también tiene un parámetro de URL, el niño también debe declararlo en su matriz
params
. En el ejemplo anterior, "parentParam" debe estar incluido en el estado de los hijos.
Si no lo hace, se generará un error de módulo cuando se inicialice la aplicación. Esto es al menos cierto en la última versión al momento de escribir (v.0.2.10).
EDITAR
@gulsahkandemir señala que
La declaración de params en una definición de estado ha cambiado a params: {id: {}} de params: [''id'']
A juzgar por el registro de cambios, este parece ser el caso a partir de v0.2.11
Los detalles de los params se pueden encontrar en los documentos oficiales