2014-01-20 47 views
5

我注意到,當我通過一個參數,該參數是一個數組爲$ 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具體而言,你會發現,函數返回組成的URL(即LocationHtml5Url)都依賴於一個名爲toKeyValue另一個函數調用,這將編碼所有鍵值對,每當他們被設置。

此外,在您提供的示例用例中,您不需要密鑰中的等號。當使用兩個參數調用$location.search時,它們被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; 

這是不是最好的解決方案,但它按預期工作。