Me gustaría poder hacer la transición a un estado y pasar un objeto arbitrario usando ui-router.
Soy consciente de que $stateParams
se usa normalmente , pero creo que este valor se inserta en la URL y no quiero que los usuarios puedan marcar estos datos.
Me gustaría hacer algo como esto.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
¿Hay alguna forma de hacer esto sin codificar valores en la URL?
Respuestas:
En la versión 0.2.13, debería poder pasar objetos a $ state.go,
y luego acceda al parámetro en su controlador.
myParam no aparecerá en la URL.
Fuente:
Vea el comentario de christopherthielen https://github.com/angular-ui/ui-router/issues/983 , reproducido aquí para mayor comodidad:
fuente
transitionTo
También funciona con .[object Object]
$stateProvider.state('myState', { url: '/myState/{myParam:json}', params: {myParam: null},...
Consulte las notas de la versión 0.2.13 y los comentarios del código para esta función.{ url: '/mystate/{id:[0-9]+}', params: { id: null, myParam: null }, ...
Hay dos partes de este problema
1) usando un parámetro que no alteraría una URL (usando la propiedad params):
2) pasar un objeto como parámetro: Bueno, no hay una forma directa de cómo hacerlo ahora, ya que cada parámetro se convierte en una cadena ( EDITAR : desde 0.2.13, esto ya no es cierto, puede usar objetos directamente), pero puede solucionarlo creando la cadena por su cuenta
y en el controlador de destino deserializar el objeto nuevamente
fuente
De hecho, puedes hacer esto.
Esta es la documentación oficial sobre opciones en state.go
Allí se describe todo y, como puede ver, esta es la forma de hacerlo.
fuente
Por cierto, también puede usar el atributo ui-sref en sus plantillas para pasar objetos
fuente
1)
2)
fuente
No, la URL siempre se actualizará cuando se pasen los parámetros
transitionTo
.Esto sucede en state.js: 698 en ui-router .
fuente