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();
  };