2015-03-06 2 views
4

AngularJS обрезает конечные знаки равенства при их маршрутизации. У меня есть base64 строку, нужно добавить в качестве параметра запроса в URL (маршрут)AugluarJS усекающий конечный знак равенства

например: http://example.com/#!/updatepassword?code=NnuW3q49QW38Mf-Cg==

этот груз, как: http://example.com/#!/updatepassword?code=NnuW3q49QW38Mf-Cg

Есть обходной путь для этого?

+0

UrlEncode вашего значения параметра. –

+0

Очень хороший вопрос – Kalanamith

+0

Как вы меняете маршрут? Если вы это сделаете, например '$ location.search (" code = NnuW3q49QW38Mf-Cg == ")', он будет удален, как вы предлагаете. Но если вы выполняете '$ location.search (« код »,« NnuW3q49QW38Mf-Cg == »);', это должно быть хорошо. – kamituel

ответ

3

Если вы попытаетесь установить маршрут в виде строки, вам необходимо уйти =. Это потому, что этот символ имеет особое значение в строке запроса - он отделяет имя параметра от его значения.

Таким образом, одно решение может быть:

var query = "code=NnuW3q49QW38Mf-Cg=="; 
$location.url("/some/path?" + encodeURIComponent(query)); 

Что encodeURIComponent() будет делать, это будет заменить все специальные символы - = будут заменены %3D, например. Это предотвратит его интерпретацию как разделителя значений ключа.

Если вы хотите изменить параметры строки запроса, а не весь URL, вы можете также использовать $location.search() метод:

$location.search("code", "NnuW3q49QW38Mf-Cg=="); 

Только не забудьте передать два параметра этого метода, а не один. Если вы делаете:

$location.search("code=NnuW3q49QW38Mf-Cg=="); 

= знак не будут бежать, только освобожденным.


Угловые использует parseKeyValue() функции внутренне для разбора строки запроса, он может быть найден here. Вы можете видеть, что сплит делается над знаком =. Вот почему их раздирают.

Но если вы посмотрите на .search() method implementation, вы увидите, что parseKeyValue() вызывается только в том случае, если вы задаете один аргумент .search(). Он не вызывается, если вы указываете имя параметра как первое, а значение - как второй аргумент.

Заглянув в исходном коде еще и предлагает другое решение:

$location.search({"code": "NnuW3q49QW38Mf-Cg=="}); 
Смежные вопросы