ui-router 状態パラメータを取得できません
-
21-12-2019 - |
質問
次の 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
設計された
所属していません StackOverflow