AngularJS - Wie kann ich eine Umleitung bei voller Seitenladung durchführen?

94

Ich möchte eine Umleitung durchführen, die ein erneutes Laden der gesamten Seite durchführt, damit die Cookies von meinem Webserver beim Laden der Seite aktualisiert werden. window.location = "/#/Next"und window.location.href = "/#/Next"funktionieren nicht, sie machen eine Angular-Route, die den Server nicht trifft.

Was ist der richtige Weg, um eine vollständige Serveranforderung innerhalb eines Angular-Controllers zu stellen?

Mike Pateras
quelle
8
Hast du das jemals gelöst?
Superjos
7
Hast du das jemals gelöst?
Nolwennig
6
Hast du das jemals gelöst?
Dan Beaulieu
5
Hast du das jemals gelöst?
Mein Stapel läuft
4
Hast du das jemals gelöst?
Shahzain Ali

Antworten:

183

Für <a>Tags :

Sie müssen target="_self"auf Ihrem <a>Tag kleben

Es gibt drei Fälle, in denen AngularJS ein erneutes Laden der gesamten Seite durchführt:

  • Links, die Zielelemente enthalten
    Beispiel:<a href="https://stackoverflow.com/ext/link?a=b" target="_self">link</a>
  • Absolute Links, die zu einer anderen Domain führen
    Beispiel:<a href="http://angularjs.org/">link</a>
  • Links, die mit '/' beginnen und zu einem anderen Basispfad führen, wenn base definiert ist
    Beispiel:<a href="https://stackoverflow.com/not-my-base/link">link</a>

Verwenden von Javascript :

Mit dem $locationDienst können Sie nur die URL ändern. Sie können die Seite nicht neu laden. Wenn Sie die URL ändern und die Seite neu laden oder zu einer anderen Seite navigieren müssen, verwenden Sie bitte eine API auf niedrigerer Ebene : $window.location.href.

Sehen:

jszobody
quelle
15
$ window.location.href macht dasselbe wie window.location.href. Ich bin mir ziemlich sicher, dass $ window nur ein Wrapping-Service für window ist. In beiden Fällen führen beide eine Winkelroute anstelle der vollständigen Seitenaktualisierung durch.
Mike Pateras
3
$ window.location.href bewirkt definitiv eine vollständige Seitenaktualisierung, ich mache es in meiner App.
Jszobody
3
Ich habe das gleiche gelesen. Funktioniert nicht in der aktuellen Version von Chrome. Es macht eine Winkelroute.
Mike Pateras
1
1.0.6 vom CDN. Ich mache dies innerhalb eines $ http.post-Erfolgsrückrufs, wenn das wichtig ist, obwohl ich es außerhalb des Rückrufs versucht habe und die gleichen Ergebnisse erzielt habe. Wenn ich die Umleitung zu "/" durchführe (für die ich auch eine Winkelroute definiert habe), funktioniert dies mit der vollständigen Seitenaktualisierung, aber "/ # / Next" ändert nur die Ansicht.
Mike Pateras
5
<a href="..." target="_self">hat bei mir funktioniert. Vielen Dank !
Michael
33

Wir hatten das gleiche Problem mit JS-Code (dh nicht mit HTML-Anker). So haben wir das gelöst:

  1. Ändern Sie bei Bedarf die aktuelle URL virtuell über den $locationDienst. Dies kann nützlich sein, wenn Ihr Ziel nur eine Variation der aktuellen URL ist, damit Sie die Hilfsmethoden nutzen $locationkönnen. ZB sind wir gelaufen, $location.search(..., ...)um nur den Wert eines Querystring-Parameters zu ändern.

  2. Erstellen Sie die neue Ziel-URL unter Verwendung der aktuellen URL, $location.url()falls erforderlich. Um zu funktionieren, musste dieses neue alles nach Schema, Domäne und Port enthalten. Also zB wenn Sie umziehen möchten zu:

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

    dann sollten Sie die URL wie folgt einstellen:

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

    (auch mit der Führung '/').

  3. Weisen Sie eine neue Ziel-URL auf niedriger Ebene zu :$window.location.href = destinationUrl;

  4. Nachladen erzwingen, immer noch auf niedrigem Niveau: $window.location.reload();

Superjos
quelle
1
Dies funktioniert in Angular 1.3.1 mit Chrome 38 nicht. Der Wert von $ window.location.href ändert sich nicht, wenn ich einen Pfad oder eine vollständige URL zuweise. Nur $ window.location.assign () hat bei mir funktioniert.
FelixM
Mit den gleichen Problemen wie Felix, löste es auf andere Weise stackoverflow.com/questions/31137809/…
Soroush Hakami
13

Nachdem ich eine Treffer- und Probesitzung gesucht und gegeben habe, kann ich sie lösen, indem ich zuerst eine URL wie angegeben habe

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

dann neu laden

$window.location.reload();
Daniyal
quelle
Dies scheint das Problem zu beheben, aber das Klicken auf und zurück im Browser führt zu vielen Inkonsistenzen.
Luisluix
9

Ich hatte das gleiche Problem. Wenn ich window.location, $window.locationoder auch <a href="..." target="_self">die Route der Seite nicht aktualisiert. Daher werden die zwischengespeicherten Dienste verwendet, was ich in meiner App nicht möchte. Ich habe es durch Hinzufügen von window.location.reload()after behoben window.location, um das Neuladen der Seite nach dem Routing zu erzwingen. Diese Methode scheint die Seite jedoch zweimal zu laden. Könnte ein schmutziger Trick sein, aber er macht die Arbeit. So habe ich es jetzt:

  $scope.openPage = function (pageName) {
      window.location = '#/html/pages/' + pageName;
      window.location.reload();
  };
Neel
quelle
1

Versuche dies

$window.location.href="#page-name";
$window.location.reload();
Suresh Maurya
quelle