Angularjsアプリでは、のようなURLがあり
http://url.com/my_app/#/store/items
ます。
ここで、たとえば、クエリ文字列を追加したいと思います
http://url.com/my_app/#/store/items?page=2
。
しかし、URLでは、javascriptは"?" to "%3F"
私が望まないものをエンコードします。「?」のままにする必要があります urlでのみangularjs$location.search()は「%3F」に対して何も返しません。
どのようにそれを行うことができますか?
5 に答える
質問には十分な詳細がないため、HTML5以外のモードでAngularJSルーティング(または少なくとも$ locationサービス)を使用していると想定します。その場合、文字の後の部分は#
、シングルページアプリケーションの観点からURLを表します(AngularJSの詳細はこちら)。
上記の仮定が正しければ、疑問符を「手動で」追加または操作しようとしてはならないことを意味します。代わりに、クエリ文字列を操作する部分(後のsearch
部分)を変更する必要があります。必要に応じて、疑問符が最終的なURLに追加/削除されます。$location
?
あなたの場合、あなたは書くことができます:
$location.path('/store/items').search('page', 2)
これは、質問で述べたように、JavaScriptからURLを操作していることを前提としています。
次のようなパラメーター オブジェクトを作成できます。
var param = {
page: 2
}
$location.url("/store/items").search(param)
強く推奨されるui-routerを使用している場合は、ここで$state.go(to, params, options)
説明されているように使用できます。
前提条件として、状態を適切に定義する必要があります。つまり、可能なすべてのクエリ パラメータを ui-router に認識させる必要があります。次の例 (page
およびotherParam
)を参照してください。
$stateProvider.
state('storeItems', {
url: '/store/items?page&otherParam',
templateUrl: '/modules/store/views/item.client.view.html'
});
そして、たとえばコントローラーから呼び出して場所を切り替えることができます
$scope.gotoItemsPage = function(page) {
$state.go('storeItems', {
page: page,
otherParam: 'Just a show off'
});
};
必要なエンコーディングをいじる必要はなく、非常に読みやすいです!
decodeURIComponentを使用できます。
例えば:
decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2');
// will give you `http://url.com/my_app/#/store/items?page=2`