urlrouterprovider uirouter tutorial template angularjs angular-ui-router

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.



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