質問

次の ui-router 構成を考えてみましょう。

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

私のアプリには次のリンクがあります。

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

私はそれを手に入れようとしています feedId 状態パラメータ:

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

しかし残念ながら、 $state.params いつも {}.

私の何が間違っているのでしょうか?

おまけの質問

私が期待する FeedCtrl リンクをクリックするたびに初期化されます。つまり、状態が変わるたびに app.feed. 。だから、私が次の間を変更すると、 app.feed 状態と他の状態を複数回繰り返すと、 console.log 複数回実行するには上記のようにします。しかし、ui-routerが初期化されているようです FeedCtrl 1回だけ。なぜ?

役に立ちましたか?

解決

パラメータを渡すには、それを定義する必要があります。

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

この場合、次のように定義します。 {feedId}

詳細はこちらをご覧ください

いくつかの例:

  • '/user/{id:[^/]*}' - と同じ '/user/{id}' 前の例から。
  • '/user/{id:[0-9a-fA-F]{1,8}}' - 前の例と似ていますが、id パラメータが 1 ~ 8 の 16 進数で構成されている場合にのみ一致します。
  • '/files/{path:.*}' - 「/files/」で始まる任意の URL と一致し、パスの残りの部分をパラメータ「path」にキャプチャします。
  • '/files/*path' -同上。すべてをキャッチするための特別な構文。

パラメータが定義されている場合は、さまざまな状態間を移動します。 feedId 価値観...実際に見てみると、そのコントローラーは FeedCtrl インスタンス化されます。このようにして、 ui-router 設計された

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top