Domanda

Considera la seguente configurazione dell'interfaccia utente:

$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"
      }
    }
  })
.

Ho il seguente link nella mia app:

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

Sto cercando di ottenere il feedId in parametri di stato:

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

Ma, sfortunatamente, $state.params è sempre {}.

Cosa sto facendo male?

Domanda bonus

Mi aspetto che FeedCtrl venga inizializzato ogni volta che faccio clic sul link, I.e. Ogni volta che lo stato viene modificato in app.feed.Quindi, se cambio tra lo stato app.feed e qualche altro stato più volte, mi aspetto che il console.logMa sembra che l'ui-router inizializza FeedCtrl solo una volta.Perché?

È stato utile?

Soluzione

Per passare un parametro - dobbiamo definirlo:

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

In questo caso lo definiamo come {feedId}

Vedi di più qui

Alcuni esempi:

    .
  • '/user/{id:[^/]*}' - come '/user/{id}' dall'esempio precedente.
  • '/user/{id:[0-9a-fA-F]{1,8}}' - simile all'esempio precedente, ma corrisponde solo se il parametro ID è composto da 1 a 8 cifre esadecimale.
  • '/files/{path:.*}': corrisponde a qualsiasi URL Avvio con '/ Files /' e cattura il resto del percorso nel parametro 'percorso'.
  • '/files/*path' - Idem. Sintassi speciale per prendere tutto.

Nel caso in cui abbiamo definito il parametro, e navighiamo tra stati con diversi valori feedId ... vedremo veramente, che quel controller FeedCtrl è reinstantiato. È così che il ui-router è stato progettato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top