AngularJS - Как я могу сделать перенаправление с полной загрузкой страницы?
Я хочу сделать перенаправление, которое выполняет полную перезагрузку страницы, чтобы файлы cookie с моего веб-сервера обновлялись при загрузке страницы. window.location = "/#/Next"
и window.location.href = "/#/Next"
не работают, они выполняют маршрут Angular, который не попадает на сервер.
Каков правильный способ сделать полный запрос сервера в контроллере Angular?
Ответы
Ответ 1
Для тегов <a>
:
Вам нужно вставить target="_self"
в тэг <a>
Есть три случая, когда AngularJS выполняет полную перезагрузку страницы:
- Ссылки, содержащие целевой элемент
Пример: <a href="/ext/link?a=b" target="_self">link</a>
- Абсолютные ссылки, которые переходят в другой домен
Пример: <a href="http://angularjs.org/">link</a>
- Ссылки, начинающиеся с '/', которые приводят к другому базовому пути, когда база определена.
Пример:
<a href="/not-my-base/link">link</a>
Использование javascript:
Служба $location
позволяет вам изменять только URL-адрес; он не позволяет перезагружать страницу. Когда вам нужно изменить URL-адрес и перезагрузить страницу или перейти на другую страницу, используйте API нижнего уровня: $window.location.href
.
См:
Ответ 2
У нас была такая же проблема, работая из JS-кода (т.е. не из HTML-привязки). Так мы решили, что:
-
При необходимости, фактически измените текущий URL через службу $location
. Это может быть полезно, если ваш пункт назначения является всего лишь вариантом для текущего URL-адреса, поэтому вы можете использовать вспомогательные методы $location
. Например. мы побежали $location.search(..., ...)
, чтобы просто изменить значение параметра querystring.
-
Создайте новый целевой URL, используя текущий $location.url()
, если необходимо. Чтобы работать, этот новый должен был включать все после схемы, домена и порта. Так, например, если вы хотите перейти на:
http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en
то вы должны установить URL-адрес, как в:
var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';
(с ведущим '/'
).
-
Назначить новый целевой URL на уровне низкого уровня: $window.location.href = destinationUrl;
-
Принудительная перезагрузка, все еще на низком уровне: $window.location.reload();
Ответ 3
После поиска и дачи хита и пробной сессии я могу его разбить, указав сначала URL-адрес, например
$window.location.href = '/#/home/stats';
затем перезагрузите
$window.location.reload();
Ответ 4
У меня была такая же проблема. Когда я использую window.location
, $window.location
или даже <a href="..." target="_self">
, маршрут не обновляет страницу. Таким образом, используются кешированные службы, которых я не хочу в своем приложении. Я разрешил его, добавив window.location.reload()
после window.location
, чтобы заставить страницу перезагрузиться после маршрутизации. Этот метод, похоже, загружает страницу дважды. Может быть, грязный трюк, но он выполняет эту работу. Вот как я теперь это делаю:
$scope.openPage = function (pageName) {
window.location = '#/html/pages/' + pageName;
window.location.reload();
};