AngularJSで i-router を使用してクエリパラメータを抽出するにはどうすればよいですか?
AngularJSの$location
サービスで私がやった:
($ location.search())。uid
uRLからパラメーターuidを抽出します。 ui-routerに対応するコードは何ですか?
クエリパラメータにバインドしている場合を除き(ドキュメントを参照)、$state
または$stateParams
から直接アクセスすることはできません。 $location
サービスを使用します。
EDIT:ドキュメント ごとに、$stateParams
でクエリパラメータをキャプチャする場合は、?
をurl
、&
、つまりurl: "/foo?bar&baz"
で区切られた各クエリパラメータに名前を付けます。
RL routing documentation のクエリパラメータセクションを参照してください。
「?」の後に、クエリパラメータとしてパラメータを指定することもできます。
url: "/contacts?myParam" // will match to url of "/contacts?myParam=value"
この例では、URLが/contacts?myParam=value
の場合、$state.params
の値は次のようになります。
{ myParam: 'value' }
ui-routerは、$ locationサービスのようにURLの異なるタイプのパラメーターを区別しません。
コントローラーでは、$ stateParamsサービスを使用して、URLのさまざまな種類のパラメーターすべてにアクセスできます。
以下は、ui-router wikiの例です。
// Then you navigated your browser to:
'/users/123/details/default/0?from=there&to=here'
// Your $stateParams object would be
{ id:'123', type:'default', repeat:'0', from:'there', to:'here' }
したがって、uidパラメータを見つけるには、次のように使用します。
$scope.uid = $stateParams.uid
また、$ stateProviderでクエリパラメータを定義する必要があります。
state('new-qs', {
url: '/new?portfolioId¶m1¶m2',
templateUrl: 'new.html',
controller: function($scope, $stateParams) {
$scope.portfolioId = $stateParams.portfolioId;
$scope.param1 = $stateParams.param1;
$scope.param2 = $stateParams.param2;
}
})
benfoster.io で説明するように
$ stateParamsから取得できますが、その場合はルートでクエリ変数も宣言する必要があります。
ルートで宣言する-
url: '/path?name'
コントローラに名前を取得するために$ stateParamsを挿入し、次のように使用します-
$stateParams.name
AngularJSとui-routerの最近のバージョンでは、$state
を使用してパラメーターにアクセスできると思います。
$state.params[<PARAMETER_NAME>]
app.jsでは、次のように状態を定義しました。
.state('app.name', {
url: '/:some_param_id',
templateUrl: '/templates/home.html'
})