2014-01-20 17 views
5

I 'は、(Iは、$ location.search()に配列されたパラメータを渡されたとき、それは次の例のように符号化されたこと

$のlocation.pathに気づきます/ somePath ')。search(' ids [] = '、[1、2、3]);

はなり

/somePath?DS%5B%5D = 1つの& DS%5B%5D = 2つの& DS%5B%が5D = 3

URLエンコードを回避する方法はありますか?

答えて

2

私は同様の苦境に遭いましたが、私はアドバイスを提供すると思いました。

つまり、$location.searchを使用する場合、エンコードされているURLを避けることはできません。

あなたが角度ソース、location.jsを見てみる場合は特に、あなたは機能はすべて、いつでも彼らはすべてのキーと値のペアをエンコードしますtoKeyValueという名前の別の関数を呼び出し、に依存している合成のURL(すなわちLocationHtml5Url)を返すことに気づくでしょう設定されています。

さらに、指定した使用例では、キーの中にequalsは必要ありません。 $location.searchが2つのパラメータで呼び出されると、それらはAngularによってキーと値のペアとして扱われます。

エンコード後にロケーションURLを使用する必要がある場合は、いつでもdecodeURIComponentと電話することができます。

1

後半にいくつかの年、私は$ロケーションサービスによって作られたURIエンコードを回避する方法を発見した:ちょうどそれが最善の解決策ではなく、意図したとおり、それは動作しますwindow.encodeURIComponent

var original = window.encodeURIComponent; 
window.encodeURIComponent = function (str) { 
    return decodeURI(str); 
}; 
$location.url('/somePath?ids=[1,2,3]'); 
window.encodeURIComponent = original; 

を書き換えます。

関連する問題