Мое приложение AngularJS должно иметь доступ к профилю пользователя LinkedIn. Чтобы сделать это, мне нужно перенаправить пользователя на URL-адрес LinkedIn, который содержит параметр обратного вызова redirect_uri, который сообщит LinkedIn о перенаправлении пользователя обратно в мое веб-приложение и включит в URL параметр запроса «code». Это традиционный поток Oauth 2.0.
Все отлично работает, за исключением того, что LinkedIn перенаправляет пользователя обратно на следующий URL:
http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites
Я хотел бы удалить ?code=XXX&state=YYY
из URL, чтобы сделать его чистым. Пользователю не нужно видеть параметры запроса, которые я получил от перенаправления LinkedIn.
Я пытался $location.absUrl($location.path() + $location.hash()).replace()
, но он сохраняет параметры запроса в URL.
Я также не могу извлечь параметры запроса, например, «код», используя ($location.search()).code
. Кажется, что есть? перед # в указанном выше URL обманывает Angular.
Я получил ответ на форуме AngularJS. Смотрите эту тему для деталей
Ссылка на ветку групп Google, которая трудна для чтения и не дает четкого ответа. Для удаления параметров URL используйте
источник
The link is to a Google Groups thread, which is difficult to read and doesn't provide a clear answer
Чтобы удалить ВСЕ параметры запроса, выполните:
Чтобы удалить ОДИН конкретный параметр запроса, выполните:
источник
undefined
, если вы избегаете использовать,null
как я.Чтобы очистить элемент, удалите его и вызовите $$ compose
получено из источника angularjs: https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443
источник
search
метод. docs.angularjs.org/api/ng/service/$location#searchВы можете удалить определенный параметр запроса, используя:
Или вы можете очистить все параметры запроса, установив поиск для пустого объекта:
источник
$location.$$search = {}
выполнены). Решение @basarat работает хорошо.На момент написания, как ранее упоминалось @Bosh,
html5mode
должно бытьtrue
, чтобы можно было установить$location.search()
и отразить его обратно в визуальный URL окна.См. Https://github.com/angular/angular.js/issues/1521 для получения дополнительной информации.
Но если
html5mode
этоtrue
вы можете легко очистить строку запроса URL - адрес с:или
Это также изменит визуальный URL окна.
(Проверено в версии AngularJS
1.3.0-rc.1
сhtml5Mode(true)
.)источник
Нужно заставить его работать когда
html5mode
=false
?Все остальные ответы работают только тогда , когда Угловая - х
html5mode
этоtrue
. Если вы работаете внеhtml5mode
, то$location
относится только к «поддельному» местоположению, которое находится в вашем хэше - и поэтому$location.search
не может видеть / редактировать / исправлять параметры поиска реальной страницы.Вот обходной путь, который нужно вставить в HTML-код страницы перед угловой нагрузкой:
источник
myapp/#?client=clientName
вместоmyapp/?client=clientName
Просто используйте
Вместо того
источник
Если вы хотите перейти на другой URL и очистить параметры запроса, просто используйте:
источник
Если вы используете параметры маршрутов, просто очистите $ routeParams
источник
$routeParams
вnull
. На самом деле не влияет на параметры URL в адресной строке.Как насчет установки хэша местоположения в нуль
источник
если вы немедленно обработаете параметры и затем перейдете на следующую страницу, вы можете поставить знак вопроса в конце нового местоположения.
например, если бы вы сделали $ location.path ('/ nextPage');
вместо этого вы можете сделать это: $ location.path ('/ nextPage?');
источник
Я попробовал вышеуказанные ответы, но не смог заставить их работать. Единственный код, который работал для меня, был
$window.location.search = ''
источник
Я могу заменить все параметры запроса одной строкой:
$location.search({});
простой для понимания и простой способ их очистки.
источник
Принятый ответ сработал для меня, но мне нужно было покопаться немного глубже, чтобы исправить проблемы с кнопкой возврата.
Что я заметил, так это то, что если я ссылаюсь на страницу с помощью
<a ui-sref="page({x: 1})">
, а затем удаляю строку запроса с помощью$location.search('x', null)
, я не получаю дополнительной записи в истории браузера, поэтому кнопка «Назад» возвращает меня туда, откуда я начал. Хотя я чувствую, что это неправильно, потому что я не думаю, что Angular должен автоматически удалить эту запись истории для меня, это фактически желаемое поведение для моего конкретного варианта использования.Проблема заключается в том, что если я ссылку на страницу , используя
<a href="https://stackoverflow.com/page/?x=1">
вместо этого, затем удалить строку запроса таким же образом, я сделать получить дополнительную запись в моей истории браузера, так что я должен нажать на кнопку назад дважды , чтобы вернуться туда , где я начал , Это противоречивое поведение, но на самом деле это кажется более правильным.Я легко могу решить проблему со
href
ссылками с помощью$location.search('x', null).replace()
, но тогда это ломает страницу, когда вы заходите на нее поui-sref
ссылке, так что это не хорошо.После долгих раздумий я решил эту проблему:
В функции моего приложения
run
я добавил это:Затем я использую этот код для удаления параметра строки запроса:
источник
Для Angular> 2 , вы можете передать null всем параметрам, которые хотите очистить
источник