it-swarm.com.de

AngularJS - Wie kann ich eine Weiterleitung mit vollem Seitenladevorgang durchführen?

Ich möchte eine Umleitung durchführen, bei der ein vollständiger Neuladen der Seite durchgeführt wird, sodass die Cookies meines Webservers beim Laden der Seite aktualisiert werden. window.location = "/#/Next" und window.location.href = "/#/Next" funktionieren nicht, sie führen eine Angular-Route durch, die den Server nicht trifft.

Was ist der richtige Weg, um eine vollständige Serveranfrage in einem Angular-Controller durchzuführen?

92
Mike Pateras

Für <a>-Tags:

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

Es gibt drei Fälle, in denen AngularJS ein vollständiges Neuladen der Seite ausführt:

  • Links, die Zielelemente enthalten
    Beispiel: <a href="/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 bei der Definition der Basis zu einem anderen Basispfad führen
    Beispiel: <a href="/not-my-base/link">link</a>

Javascript verwenden:

Mit dem Dienst $location 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 eine API auf niedrigerer Ebene: $window.location.href.

Sehen:

180
jszobody

Wir hatten das gleiche Problem und arbeiteten mit JS-Code (d. H. Nicht mit HTML-Anker). So haben wir das gelöst:

  1. Bei Bedarf kann virtuell die aktuelle URL über den $location-Dienst ändern. Dies kann nützlich sein, wenn Ihr Ziel nur eine Variation der aktuellen URL ist, sodass Sie $location-Hilfemethoden nutzen können. Z.B. Wir haben $location.search(..., ...) ausgeführt, um nur den Wert eines Querstrings-Parameters zu ändern.

  2. Erstellen Sie die neue Ziel-URL und verwenden Sie bei Bedarf die aktuelle $location.url(). Um funktionieren zu können, musste dieses neue Element alles nach Schema, Domäne und Port einschließen. So z. wenn Sie umziehen möchten: 

    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 dem führenden '/').

  3. Neue Ziel-URL unter low-level zuweisen: $window.location.href = destinationUrl;

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

32
superjos

Nach dem Suchen und Geben von Treffern und Tests kann ich es lösen, indem ich zunächst eine URL wie

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

dann neu laden

$window.location.reload();
11
Daniyal

Ich hatte das gleiche Problem. Wenn ich window.location, $window.location oder sogar <a href="..." target="_self"> verwende, aktualisiert die Route die Seite nicht. Die zwischengespeicherten Dienste werden also verwendet, was ich in meiner App nicht will. Ich löste es durch Hinzufügen von window.location.reload() nach 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 es macht die Arbeit. So habe ich es jetzt:

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

Versuche dies

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