Pregunta

Considere la siguiente configuración de enrutador de interfaz de usuario:

$stateProvider
  .state('app', {
    url: "/app",
    abstract: true,
    templateUrl: "templates/menu.html",
    controller: 'AppCtrl'
  })
  .state('app.feed', {
    url: "/feed",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }
  })

Tengo el siguiente enlace en mi aplicación:

<a ui-sref="app.feed({ feedId: 5 })">My Link</a>

Estoy tratando de conseguir el feedId en parámetros de estado:

angular.module('MyApp').controller('FeedCtrl', function($state) {
  console.log($state.params);
});

Pero desafortunadamente, $state.params es siempre {}.

¿Qué estoy haciendo mal?

PREGUNTA EXTRA

Espero FeedCtrl para inicializarse cada vez que hago clic en el enlace, es decircada vez que el estado cambia a app.feed.Entonces, si cambio entre app.feed estado y algún otro estado varias veces, espero que el console.log arriba para ejecutarse varias veces.Pero parece que el ui-router se inicializa FeedCtrl sólo una vez.¿Por qué?

¿Fue útil?

Solución

Para pasar un parámetro, tenemos que definirlo:

 .state('app.feed', {
    url: "/feed/{feedId}",
    views: {
      'menuContent': {
        templateUrl: "templates/feed.html",
        controller: "FeedCtrl"
      }
    }

En este caso lo definimos como {feedId}

Ver más aquí

Algunos ejemplos:

  • '/user/{id:[^/]*}' - Igual que '/user/{id}' del ejemplo anterior.
  • '/user/{id:[0-9a-fA-F]{1,8}}' - Similar al ejemplo anterior, pero solo coincide si el parámetro id consta de 1 a 8 dígitos hexadecimales.
  • '/files/{path:.*}' - Coincide con cualquier URL que comience con '/files/' y captura el resto de la ruta en el parámetro 'ruta'.
  • '/files/*path' - Lo mismo.Sintaxis especial para capturar todo.

En caso de que tengamos parámetros definidos, navegaremos entre estados con diferentes feedId valores...realmente veremos, que ese controlador FeedCtrl se reinstancia.Así es como el ui-router fue diseñado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top