Если вы попытаетесь установить маршрут в виде строки, вам необходимо уйти =
. Это потому, что этот символ имеет особое значение в строке запроса - он отделяет имя параметра от его значения.
Таким образом, одно решение может быть:
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=="});
UrlEncode вашего значения параметра. –
Очень хороший вопрос – Kalanamith
Как вы меняете маршрут? Если вы это сделаете, например '$ location.search (" code = NnuW3q49QW38Mf-Cg == ")', он будет удален, как вы предлагаете. Но если вы выполняете '$ location.search (« код »,« NnuW3q49QW38Mf-Cg == »);', это должно быть хорошо. – kamituel