AngularJS - Як я можу зробити переспрямування при повному завантаженні сторінки?


94

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

Який правильний спосіб зробити повний запит сервера в контролері Angular?


8
Ви коли-небудь вирішували це?
superjos

7
Ви коли-небудь вирішували це?
Нольвенніг

6
Ви коли-небудь вирішували це?
Dan Beaulieu

5
Ви коли-небудь вирішували це?
Мій стек переповнюється

4
Ви коли-небудь вирішували це?
shahzain ali

Відповіді:


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.

Побачити:


15
$ window.location.href робить те саме, що робить window.location.href. Я майже впевнений, що $ window - це просто служба обтікання для вікна. У будь-якому випадку обидва роблять кутовий маршрут замість повного оновлення сторінки.
Mike Pateras

3
$ window.location.href однозначно викликає повне оновлення сторінки, я роблю це в своєму додатку.
jszobody

3
Я читав те саме. Не працює в поточній версії Chrome. Це робить Кутовий маршрут.
Mike Pateras

1
1.0.6 з CDN. Я роблю це в рамках зворотного виклику $ http.post, якщо це має значення, хоча я пробував це поза зворотним викликом і отримував ті самі результати. Якщо я переспрямовую на "/" (для якого я також визначив Кутовий маршрут), це працює з повним оновленням сторінки, але "/ # / Далі" просто змінює подання.
Mike Pateras

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


1
Це не працює для мене в Angular 1.3.1 з Chrome 38. Значення $ window.location.href не змінюється, коли я призначаю шлях або повну URL-адресу. У мене працював лише $ window.location.assign ().
FelixM

Маючи ті самі проблеми, що і Фелікс, вирішив це по-іншому stackoverflow.com/questions/31137809/…
Сороуш Хакамі

13

Після пошуку та видачі хіту та пробної сесії я можу полюбити його, попередньо вказавши url like

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.