Necesito pasar y recibir dos parámetros al estado al que quiero transitar usando ui-sref
ui-router.
Algo así como usar el siguiente enlace para hacer la transición del estado a home
con foo
y bar
parámetros:
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Recepción foo
y bar
valores en un controlador:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Consigo undefined
para $stateParam
en el controlador.
¿Alguien podría ayudarme a entender cómo hacerlo?
Editar:
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
'A@home': {
templateUrl: 'a.html',
controller: 'MainCtrl'
},
'B@home': {
templateUrl: 'b.html',
controller: 'SomeController'
}
}
});
url:'.../home/:foo/:bar
'/:foo/:bar': {
en tu ruta en blanco o también puedes configurarlo como cadena de consulta.Respuestas:
He creado un ejemplo para mostrar cómo. La
state
definición actualizada sería:Y este sería el controlador:
Lo que podemos ver es que la casa del estado ahora tiene una URL definida como:
lo que significa que los parámetros en url se esperan como
Estos dos enlaces pasarán correctamente los argumentos al controlador:
Además, el controlador consume en
$stateParams
lugar de$stateParam
.Enlace al documento:
Puedes consultarlo aquí
params : {}
También hay una nueva configuración más granular
params : {}
. Como ya hemos visto, podemos declarar parámetros como parte deurl
. Pero con laparams : {}
configuración, podemos ampliar esta definición o incluso introducir parámetros que no forman parte de la URL:La configuración disponible para los parámetros se describe en la documentación de $ stateProvider
A continuación hay solo un extracto
Podemos llamar a estos parámetros de esta manera:
Compruébalo en acción aquí
fuente
url: "/:id?foo&bar"
No necesariamente necesita tener los parámetros dentro de la URL.
Por ejemplo, con:
Podrá enviar parámetros al estado, utilizando:
Por supuesto, si vuelve a cargar la página una vez en el
home
estado, perderá los parámetros de estado, ya que no se almacenan en ningún lugar.Aquí se documenta una descripción completa de este comportamiento , debajo de la
params
fila de lastate(name, stateConfig)
sección.fuente
Simplemente escribiste mal
$stateParam
, debería ser$stateParams
(con una s). Es por eso que te vuelves indefinido;)fuente