start sref route otherwise example change javascript html angularjs angular-ui-router angular-ui

javascript - sref - ui-router params



Cómo pasar parámetros usando ui-sref en ui-router al controlador (3)

Necesito pasar y recibir dos parámetros al estado al que quiero transitar usando ui-sref de ui-router.

Algo así como usar el siguiente enlace para hacer la transición del estado a home 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>

Recepción de 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 //.. });

Tengo 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'' } } });


He creado un example para mostrar cómo. La definición de state actualizada sería:

$stateProvider .state(''home'', { url: ''/:foo?bar'', views: { '''': { templateUrl: ''tpl.home.html'', controller: ''MainRootCtrl'' }, ... }

Y este sería el controlador:

.controller(''MainRootCtrl'', function($scope, $state, $stateParams) { //.. var foo = $stateParams.foo; //getting fooVal var bar = $stateParams.bar; //getting barVal //.. $scope.state = $state.current $scope.params = $stateParams; })

Lo que podemos ver es que la casa del estado ahora tiene una URL definida como:

url: ''/:foo?bar'',

lo que significa que los parámetros en url se esperan como

/fooVal?bar=barValue

Estos dos enlaces pasarán correctamente los argumentos al controlador:

<a ui-sref="home({foo: ''fooVal1'', bar: ''barVal1''})"> <a ui-sref="home({foo: ''fooVal2'', bar: ''barVal2''})">

Además, el controlador consume $stateParams lugar de $stateParam .

Enlace al documento:

Puedes consultarlo example

params : {}

También hay parámetros de configuración nuevos y más granulares params : {} . Como ya hemos visto, podemos declarar parámetros como parte de url . Pero con la configuración de params : {} , podemos ampliar esta definición o incluso introducir parámetros que no forman parte de la URL:

.state(''other'', { url: ''/other/:foo?bar'', params: { // here we define default value for foo // we also set squash to false, to force injecting // even the default value into url foo: { value: ''defaultValue'', squash: false, }, // this parameter is now array // we can pass more items, and expect them as [] bar : { array : true, }, // this param is not part of url // it could be passed with $state.go or ui-sref hiddenParam: ''YES'', }, ...

La configuración disponible para los parámetros se describe en la documentación de $stateProvider

A continuación hay solo un extracto

  • valor - {objeto | función =} : especifica el valor predeterminado para este parámetro. Esto establece implícitamente este parámetro como opcional ...
  • array - {boolean =}: (predeterminado: false) Si es verdadero, el valor de parámetro se tratará como una matriz de valores.
  • squash - {bool | string =}: squash configura cómo se representa un valor de parámetro predeterminado en la URL cuando el valor del parámetro actual es el mismo que el valor predeterminado.

Podemos llamar a estos parámetros de esta manera:

// hidden param cannot be passed via url <a href="#/other/fooVal?bar=1&amp;bar=2"> // default foo is skipped <a ui-sref="other({bar: [4,5]})">

Compruébalo en acción example


No necesariamente necesita tener los parámetros dentro de la URL.

Por ejemplo, con:

$stateProvider .state(''home'', { url: ''/'', views: { '''': { templateUrl: ''home.html'', controller: ''MainRootCtrl'' }, }, params: { foo: null, bar: null } })

Podrá enviar parámetros al estado, utilizando:

$state.go(''home'', {foo: true, bar: 1}); // or <a ui-sref="home({foo: true, bar: 1})">Go!</a>

Por supuesto, si vuelve a cargar la página una vez en el estado home , perderá los parámetros de estado, ya que no se almacenan en ningún lugar.

$stateProvider se documenta una descripción completa de este comportamiento, debajo de la fila de params en la sección state(name, stateConfig) .


Simplemente escribió incorrectamente $stateParam , debería ser $stateParams (con una s). Es por eso que te vuelves indefinido;)