41

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」に対して何も返しません。

どのようにそれを行うことができますか?

4

5 に答える 5

83

質問には十分な詳細がないため、HTML5以外のモードでAngularJSルーティング(または少なくとも$ locationサービス)を使用していると想定します。その場合、文字の後の部分は#、シングルページアプリケーションの観点からURLを表します(AngularJSの詳細はこちら)。

上記の仮定が正しければ、疑問符を「手動で」追加または操作しようとしてはならないことを意味します。代わりに、クエリ文字列を操作する部分(後のsearch部分)を変更する必要があります。必要に応じて、疑問符が最終的なURLに追加/削除されます。$location?

あなたの場合、あなたは書くことができます:

$location.path('/store/items').search('page', 2)

これは、質問で述べたように、JavaScriptからURLを操作していることを前提としています。

于 2013-03-04T16:23:41.397 に答える
3

次のようなパラメーター オブジェクトを作成できます。

var param = {
    page: 2
}
$location.url("/store/items").search(param)
于 2015-05-05T12:11:45.030 に答える
1

強く推奨される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'
  });
};

必要なエンコーディングをいじる必要はなく、非常に読みやすいです!

于 2015-01-04T17:30:01.797 に答える
-3

decodeURIComponentを使用できます。

例えば:

decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2');
// will give you `http://url.com/my_app/#/store/items?page=2`
于 2013-03-04T09:06:43.743 に答える