Cómo pasar los parámetros usando ui-sref en el ui-router al controlador
Necesito pasar y recibir dos parámetros al estado al que quiero transitar usando "u-sref" de ui-router.
Algo así como usar el enlace de abajo para pasar el estado a "casa" con los parámetros "foo" y "bar":
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Recibiendo valores "foo" y "bar" en un controlador:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Me quedo "indefinido" por "StateParam" en el controlador.
¿Podría alguien 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'
}
}
});
364
3
He creado un [ejemplo][1] para mostrar cómo hacerlo. La definición actualizada del "estado" sería:
Y este sería el controlador:
Lo que podemos ver es que el hogar estatal ahora tiene la url definida como:
lo que significa, que los parámentros en la url se esperan como
Estos dos enlaces pasarán correctamente los argumentos al controlador:
Además, el controlador consume
$stateParam
en lugar de$stateParam
.Enlace a doc:
Puedes comprobarlo [aquí][3]
params : {}
También hay nuevos, más granulados de ajuste
params : {}
. Como ya hemos visto, podemos declarar los parámetros como parte de la "curva". Pero con los `parámetros'': {}
configuración - podemos extender esta definición o incluso introducir parámetros que no son parte de la url:Los ajustes disponibles para los parámetros se describen en la documentación del [$stateProvider][4]
A continuación se muestra un extracto
Podemos llamar a estos parámetros de esta manera:
Compruébelo en acción [aquí][5]
[1]: http://plnkr.co/edit/r2JhV4PcYpKJdBCwHIWS?p=preview [2]: https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters [3]: http://plnkr.co/edit/r2JhV4PcYpKJdBCwHIWS?p=preview [4]: http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider [5]: http://plnkr.co/edit/r2JhV4PcYpKJdBCwHIWS?p=preview
No es necesario tener los parámetros dentro de la URL.
Por ejemplo, con:
Podrás enviar parámetros al estado, usando cualquiera de los dos:
Por supuesto, si recargas la página una vez en el estado "home", perderás los parámetros del estado, ya que no están almacenados en ninguna parte.
Una descripción completa de este comportamiento está documentada aquí, bajo la fila de "parámetros" en la sección "state(name, stateConfig)`.
Simplemente escribiste mal "$stateParam", debería ser "$stateParams" (con una s). Por eso te quedas sin definir ;)