AngularJS - Как сделать перенаправление при полной загрузке страницы?

94

Я хочу сделать перенаправление, которое выполняет полную перезагрузку страницы, чтобы файлы cookie с моего веб-сервера обновлялись при загрузке страницы. window.location = "/#/Next"и window.location.href = "/#/Next"не работают, они выполняют маршрут Angular, который не попадает на сервер.

Как правильно выполнить полный запрос к серверу в контроллере Angular?

Майк Патерас
источник
8
ты когда-нибудь решал это?
superjos
7
ты когда-нибудь решал это?
Nolwennig 02
6
ты когда-нибудь решал это?
Dan Beaulieu
5
ты когда-нибудь решал это?
Мой стек переполняется
4
ты когда-нибудь решал это?
Шахзайн Али

Ответы:

183

Для <a>тегов :

Вам нужно наклеить target="_self"свой <a>тег

Есть три случая, когда AngularJS выполнит полную перезагрузку страницы:

  • Ссылки, содержащие целевой элемент
    Пример:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Абсолютные ссылки, ведущие на другой домен
    Пример:<a href="http://angularjs.org/">link</a>
  • Ссылки, начинающиеся с '/', которые ведут к другому базовому пути, если база определена
    Пример:<a href="https://stackoverflow.com/not-my-base/link">link</a>

Используя javascript :

$locationУслуга позволяет изменять только URL; он не позволяет перезагружать страницу. Если вам необходимо изменить URL и перезагрузите страницу или перейдите на другую страницу, пожалуйста , используйте более низкий уровень API: $window.location.href.

Видеть:

jszobody
источник
15
$ window.location.href делает то же самое, что и window.location.href. Я почти уверен, что $ window - это просто обертка для окна. В любом случае оба выполняют маршрут Angular вместо полного обновления страницы.
Майк Патерас,
3
$ window.location.href определенно вызывает полное обновление страницы, я делаю это в своем приложении.
jszobody
3
Я читал то же самое. Не работает в текущей версии Chrome. Это угловой маршрут.
Майк Патерас,
1
1.0.6 из CDN. Я делаю это в рамках успешного обратного вызова $ http.post, если это имеет значение, хотя я пробовал его за пределами обратного вызова и получил те же результаты. Если я сделаю перенаправление на «/» (для которого у меня также определен маршрут Angular), он будет работать с полным обновлением страницы, но «/ # / Next» просто изменит представление.
Майк Патерас,
5
<a href="..." target="_self">это то, что сработало для меня. Спасибо !
Майкл
33

У нас была такая же проблема при работе с JS-кодом (т.е. не с привязкой HTML). Вот как мы решили это:

  1. При необходимости виртуально измените текущий URL-адрес через $locationслужбу. Это может быть полезно, если ваш пункт назначения - это просто вариант текущего URL-адреса, чтобы вы могли воспользоваться $locationвспомогательными методами. Например, мы побежали $location.search(..., ...)просто изменить значение параметра строки запроса.

  2. Создайте новый целевой URL, используя $location.url()при необходимости текущий . Чтобы работать, этот новый должен был включать все после схемы, домена и порта. Так, например, если вы хотите переехать в:

    http://yourdomain.com/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en

    тогда вы должны установить URL как в:

    var destinationUrl = '/YourAppFolder/YourAngularApp/#/YourArea/YourAction?culture=en';

    ( '/'тоже с ведущими ).

  3. Назначьте новый целевой URL на низком уровне :$window.location.href = destinationUrl;

  4. Принудительная перезагрузка, все еще на низком уровне: $window.location.reload();

superjos
источник
1
У меня это не работает в Angular 1.3.1 с Chrome 38. Значение $ window.location.href не меняется, когда я назначаю путь или полный URL. У меня работал только $ window.location.assign ().
FelixM
Имея те же проблемы, что и у Феликса, решил их другим способом stackoverflow.com/questions/31137809/…
Соруш Хаками
13

После поиска и выполнения пробного сеанса я могу решить его, сначала указав URL-адрес, например

$window.location.href = '/#/home/stats';

затем перезагрузите

$window.location.reload();
Даниял
источник
Кажется, это решает проблему, но щелчки в браузере вперед и назад вызовут множество несоответствий.
luisluix
9

Я была такая же проблема. Когда использую 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();
  };
Neel
источник
1

Попробуй это

$window.location.href="#page-name";
$window.location.reload();
Суреш Маурья
источник