Router AngularJS ui que pasa datos entre estados sin URL

Me enfrento a este problema de pasar datos entre dos estados sin exponer los datos en la url, es como si el usuario no pudiera aterrizar directamente en este estado.

Por ejemplo. Tengo dos estados “A” y “B”. Estoy haciendo una llamada al servidor en el estado “A” y pasando la respuesta de la llamada al estado “B”. La respuesta de la llamada al servidor es un mensaje de cadena, que es bastante largo, por lo que no puedo exponerlo en la url.

Entonces, ¿hay alguna forma en el enrutador ui angular para pasar datos entre estados, sin usar parámetros de URL?

Podemos usar params , nueva característica del UI-Router:

Referencia de API / ui.router.state / $ stateProvider

params Un mapa que configura opcionalmente parámetros declarados en la url, o define parámetros adicionales que no son url. Para cada parámetro que se configura, agregue un objeto de configuración con el nombre del parámetro.

Vea la parte: ” … o define parámetros adicionales que no son url …

Entonces la def del estado sería:

 $stateProvider .state('home', { url: "/home", templateUrl: 'tpl.html', params: { hiddenOne: null, } }) 

Pocos ejemplos del documento mencionado anteriormente :

 // define a parameter's default value params: { param1: { value: "defaultValue" } } // shorthand default values params: { param1: "defaultValue", param2: "param2Default" } // param will be array [] params: { param1: { array: true } } // handling the default value in url: params: { param1: { value: "defaultId", squash: true } } // squash "defaultValue" to "~" params: { param1: { value: "defaultValue", squash: "~" } } 

EXTEND – ejemplo de trabajo: http://plnkr.co/edit/inFhDmP42AQyeUBmyIVl?p=info

Aquí hay un ejemplo de una definición de estado:

  $stateProvider .state('home', { url: "/home", params : { veryLongParamHome: null, }, ... }) .state('parent', { url: "/parent", params : { veryLongParamParent: null, }, ... }) .state('parent.child', { url: "/child", params : { veryLongParamChild: null, }, ... }) 

Esta podría ser una llamada usando ui-sref:

 home parent parent.child 

Mira el ejemplo aquí

El objeto params se incluye en $ stateParams, pero no formará parte de la url.

1) En la configuración de la ruta:

 $stateProvider.state('edit_user', { url: '/users/:user_id/edit', templateUrl: 'views/editUser.html', controller: 'editUserCtrl', params: { paramOne: { objectProperty: "defaultValueOne" }, //default value paramTwo: "defaultValueTwo" } }); 

2) En el controlador:

 .controller('editUserCtrl', function ($stateParams, $scope) { $scope.paramOne = $stateParams.paramOne; $scope.paramTwo = $stateParams.paramTwo; }); 

3A) Cambiar el estado de un controlador

 $state.go("edit_user", { user_id: 1, paramOne: { objectProperty: "test_not_default1" }, paramTwo: "from controller" }); 

3B) Cambiar el estado en html

 

Ejemplo Plunker