Вопрос: AngularJS: избегать кодирования url с помощью $ location


Я замечаю, что когда я передал параметр, который является массивом в $ location.search (), он был закодирован, как в следующем примере

$ location.path ('/ somePath'). search ('ids [] =', [1, 2, 3]);

становится

/ SomePath? DS% 5B% 5D = 1 & DS% 5B% 5D = 2 & DS% 5B% 5D = 3

Есть ли способ избежать кодирования URL?


5


источник


Ответы:


Извините за поздний ответ, но я ударил подобное затруднительное положение и подумал, что дам совет.

Короче говоря, если вы намереваетесь использовать $location.search вы не можете избежать кодирования URL.

Если вы посмотрите на Угловой источник, location.js в частности, вы заметите, что функции возвращают составные URL-адреса (т. LocationHtml5Url) все полагаются на другой вызов функции с именем toKeyValue, который будет кодировать все пары ключ-значение всякий раз, когда они установлены.

Кроме того, в примере использования, который вы предоставили, вам не нужны равные внутри вашего ключа. когда $location.search вызывается с двумя параметрами, они обрабатываются как пара ключ-значение по угловому.

Если вам нужно использовать URL-адрес местоположения после его кодирования, вы всегда можете позвонить decodeURIComponent,


2



Несколько лет спустя, но я нашел способ обойти кодировку URI, созданную службой $ location: просто перепишите window.encodeURIComponent 

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

Это не лучшее решение, но оно работает по назначению.


1