Ich hatte den Eindruck, dass Angular URLs neu schreiben würde, die in href-Attributen von Anchor-Tags in tempentes erscheinen, so dass sie funktionieren würden, egal ob im HTML5-Modus oder im Hashbang-Modus. Die Dokumentation für den Ortungsdienst scheint zu sagen, dass HTML Link Rewriting sich um die Hashbang-Situation kümmert. Ich würde also erwarten, dass, wenn nicht im HTML5-Modus, Hashes eingefügt werden, und im HTML5-Modus würden sie nicht.
Es scheint jedoch, dass kein Neuschreiben stattfindet. Im folgenden Beispiel kann ich den Modus nicht einfach ändern. Alle Links in der Anwendung müssten von Hand neu geschrieben werden (oder zur Laufzeit von einer Variablen abgeleitet werden. Muss ich alle URLs je nach Modus manuell neu schreiben?
)Ich sehe keine clientseitige URL-Umschreibung in Angular 1.0.6, 1.1.4 oder 1.1.3. Es scheint, dass alle href-Werte mit # / für den Hashbang-Modus und / für den HTML5-Modus vorangestellt werden müssen.
Gibt es eine Konfiguration, die zum Umschreiben erforderlich ist? Lese ich die Dokumente falsch? Etwas anderes tun, albern?
Hier ist ein kleines Beispiel:
%Vor%
Nachtrag: Wenn ich meine Frage noch einmal durchlese, sehe ich, dass ich den Begriff "Umschreiben" verwendet habe, ohne Klarheit darüber zu haben, wer und wann ich das Neuschreiben machen wollte. Die Frage ist, wie man Angular die URLs neu schreiben kann, wenn es Pfade rendert und wie man Pfade im JS-Code gleichmäßig über die beiden Modi interpretiert. Es ist nicht darüber, wie ein Webserver HTML5-kompatibles Neuschreiben von Anfragen durchführen kann.
Die Dokumentation zum AngularJS-Routing ist nicht sehr klar. Es spricht über Hashbang und HTML5-Modus. Tatsächlich funktioniert das AngularJS-Routing in drei Modi:
Für jeden Modus gibt es eine entsprechende LocationUrl-Klasse (LocationHashbangUrl, LocationUrl und LocationHashbangInHTML5Url).
Um URL-Neuschreiben zu simulieren, müssen Sie html5mode auf true setzen und die $ -Sniffer-Klasse wie folgt dekorieren:
%Vor%Ich werde das jetzt genauer erklären:
Konfiguration:
%Vor%Dies ist der Fall, wenn Sie URLs mit Hashes in Ihren HTML-Dateien wie in
verwenden müssen %Vor% Im Browser müssen Sie den folgenden Link verwenden: http://www.example.com/base/index.html#!/base/path
Wie Sie im reinen Hashbang-Modus sehen können, müssen alle Links in den HTML-Dateien mit der Basis wie "index.html #!" beginnen.
Konfiguration:
%Vor%Sie sollten die Basis in HTML-Datei
festlegen %Vor%In diesem Modus können Sie Links ohne # in HTML-Dateien verwenden
%Vor%Link im Browser:
%Vor%Dieser Modus ist aktiviert, wenn wir den HTML5-Modus verwenden, jedoch in einem inkompatiblen Browser. Wir können diesen Modus in einem kompatiblen Browser simulieren, indem wir den $ -Sniffer-Dienst dekorieren und den Verlauf auf false setzen.
Konfiguration:
%Vor%Setze die Basis in HTML-Datei:
%Vor%In diesem Fall können die Links auch ohne den Hash in der HTML-Datei
geschrieben werden %Vor%Link im Browser:
%Vor%Das hat eine Weile gedauert, bis ich herausgefunden habe, dass dies funktioniert - Angular WebAPI ASP Routing ohne # für SEO
Hinzufügen $ locationProvider.html5Mode (true); zu app.config
Ich brauchte einen bestimmten Controller (der im Home-Controller war), der ignoriert werden sollte, um Bilder hochzuladen, also fügte ich diese Regel zu RouteConfig hinzu
%Vor%Fügen Sie in Global.asax Folgendes hinzu: Stellen Sie sicher, dass API- und Bild-Upload-Pfade ignoriert werden, damit sie wie gewohnt funktionieren, andernfalls leiten Sie alles andere um.
%Vor%Stellen Sie sicher, dass Sie $ location.url ('/ XXX') und nicht window.location ... verwenden, um
Verweisen Sie die CSS-Dateien mit dem absoluten Pfad
und nicht
%Vor%Schlussbemerkung - auf diese Weise gab mir die volle Kontrolle und ich musste nichts mit der Web-Konfiguration machen.
Ich hoffe, das hilft, da ich eine Weile gebraucht habe, um es herauszufinden.
Ich wollte mit dem HTML5-Modus und einem festen Token auf meine Anwendung zugreifen und dann zur Hashbang-Methode wechseln (um das Token beizubehalten, damit der Benutzer seine Seite aktualisieren kann).
URL für den Zugriff auf meine App:
http://myapp.com/amazing_url?token=super_token
Dann, wenn der Benutzer die Seite lädt:
http://myapp.com/amazing_url?token=super_token#/amazing_url
Wenn der Benutzer dann navigiert:
http://myapp.com/amazing_url?token=super_token#/another_url
Damit behalte ich das Token in der URL und behalte den Status beim Browsen des Benutzers. Ich habe ein wenig Sichtbarkeit der URL verloren, aber es gibt keine perfekte Möglichkeit, dies zu tun.
Aktivieren Sie also nicht den HTML5-Modus und fügen Sie diesen Controller hinzu:
%Vor%Tags und Links angularjs angular-routing