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エンコードを回避する方法はありますか?
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エンコードを回避する方法はありますか?
私は同様の苦境に遭いましたが、私はアドバイスを提供すると思いました。
つまり、$location.search
を使用する場合、エンコードされているURLを避けることはできません。
あなたが角度ソース、location.js
を見てみる場合は特に、あなたは機能はすべて、いつでも彼らはすべてのキーと値のペアをエンコードしますtoKeyValue
という名前の別の関数を呼び出し、に依存している合成のURL(すなわちLocationHtml5Url
)を返すことに気づくでしょう設定されています。
さらに、指定した使用例では、キーの中にequalsは必要ありません。 $location.search
が2つのパラメータで呼び出されると、それらはAngularによってキーと値のペアとして扱われます。
エンコード後にロケーションURLを使用する必要がある場合は、いつでもdecodeURIComponent
と電話することができます。
後半にいくつかの年、私は$ロケーションサービスによって作られたURIエンコードを回避する方法を発見した:ちょうどそれが最善の解決策ではなく、意図したとおり、それは動作しますwindow.encodeURIComponent
var original = window.encodeURIComponent;
window.encodeURIComponent = function (str) {
return decodeURI(str);
};
$location.url('/somePath?ids=[1,2,3]');
window.encodeURIComponent = original;
を書き換えます。