Ich arbeite mit AngularJS im HTML 5-Modus. Welches scheint die Kontrolle über alle href's auf der Seite zu übernehmen. Aber was ist, wenn ich einen Link zu etwas innerhalb derselben Domäne der App haben möchte, aber nicht tatsächlich in der App. Ein Beispiel wäre ein PDF.
Wenn ich <a href="https://stackoverflow.com/pdfurl">
Angular mache , versuche ich einfach, den HTML5-Modus zu verwenden und benutze den Routenanbieter, um zu bestimmen, welche Ansicht geladen werden soll. Aber ich möchte eigentlich, dass der Browser diese Seite auf normale Weise aufruft.
Ist die einzige Möglichkeit, dies zu tun, eine Regel mit dem Routenanbieter zu erstellen und diese Weiterleitung auf die richtige Seite mit window.location zu veranlassen?
A
als Richtlinie behandelt wird.Ab Angular v1.3.0 gibt es eine neue
rewriteLinks
Konfigurationsoption für den Standortanbieter. Dies schaltet das "Hijacking" aller Links auf der Seite aus:module.config(function ($locationProvider) { $locationProvider.html5Mode({ enabled: true, rewriteLinks: false }); });
Obwohl das Deaktivieren dieses Verhaltens für alle Links möglicherweise nicht Ihre Absicht ist, veröffentliche ich dies für andere, die wie ich
$location
im HTML5-Modus nur die URL ändern möchten, ohne alle Links zu beeinflussen.quelle
Wenn Sie nicht möchten, dass Angular die Kontrolle über die href übernimmt. Platzieren Sie ein Zielattribut auf dem Link.
PDF umgeht also den HTML5-Modus und den routeProvider, und der Browser wechselt einfach zu dieser URL.
quelle
Andere Lösung. Alle Links funktionieren normal (Seite neu laden). Mit gekennzeichnete Links
ng-href="https://stackoverflow.com/path"
werden auf pushState abgespielt. Kleine JS-Hack helfen dabei..config(["$locationProvider", function($locationProvider) { // hack for html5Mode customization $('a').each(function(){ $a = $(this); if ($a.is('[target]') || $a.is('[ng-href]')){ } else { $a.attr('target', '_self'); } }); $locationProvider.html5Mode(true); }])
quelle