Ich lerne AngularJS und es gibt eine Sache, die mich wirklich nervt.
Ich $routeProvider
deklariere Routing-Regeln für meine Anwendung:
$routeProvider.when('/test', {
controller: TestCtrl,
templateUrl: 'views/test.html'
})
.otherwise({ redirectTo: '/test' });
aber wenn ich im Browser zu meiner App navigiere, sehe ich app/#/test
statt app/test
.
Meine Frage ist also, warum AngularJS diesen Hash #
zu URLs hinzufügt. Gibt es eine Möglichkeit, dies zu vermeiden?
javascript
angularjs
pikkvile
quelle
quelle
Antworten:
Tatsächlich benötigen Sie das # (Hashtag) für Nicht-HTML5-Browser.
Andernfalls führen sie nur einen HTTP-Aufruf an den Server an der angegebenen href durch. Das # ist ein alter Browser-Kurzschluss, der die Anforderung nicht auslöst, sodass viele js-Frameworks darüber hinaus ihre eigene clientseitige Umleitung erstellen können.
Sie können
$locationProvider.html5Mode(true)
Angular anweisen, die HTML5-Strategie zu verwenden, falls verfügbar.Hier die Liste der Browser, die die HTML5-Strategie unterstützen: http://caniuse.com/#feat=history
quelle
Wenn Sie html5mode aktiviert haben, wie andere gesagt haben, und eine
.htaccess
Datei mit dem folgenden Inhalt erstellen (an Ihre Bedürfnisse anpassen):Benutzer werden zu Ihrer App weitergeleitet, wenn sie eine richtige Route eingeben, und Ihre App liest die Route und bringt sie auf die richtige "Seite" darin.
BEARBEITEN: Stellen Sie nur sicher, dass keine Datei- oder Verzeichnisnamen mit Ihren Routen in Konflikt stehen.
quelle
/about
schlägt die Seite fehl, es sei denn, ich komme über die App dazu.Schreiben wir eine Antwort, die einfach und kurz aussieht
Vielen Dank an @plus - für die Detaillierung der obigen Antwort
quelle
Versuchen
Weitere Informationen unter $ locationProvider
Verwenden von $ location
quelle
Die folgenden Informationen stammen von:
https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag
Es ist sehr einfach, saubere URLs abzurufen und das Hashtag aus der URL in Angular zu entfernen.
Standardmäßig leitet AngularJS URLs mit einem Hashtag weiter. Beispiel:
http://www.example.com
http://www.example.com/#/about
http://www.example.com/#/contact
Es gibt zwei Dinge, die getan werden müssen.
$ LocationProvider konfigurieren
Festlegen unserer Basis für relative Links
$ location Service
In Angular analysiert der $ location-Dienst die URL in der Adressleiste und nimmt Änderungen an Ihrer Anwendung vor und umgekehrt.
Ich würde wärmstens empfehlen, die offiziellen Angular $ -Standortdokumente zu lesen, um ein Gefühl für den Standortdienst und dessen Angebot zu bekommen.
https://docs.angularjs.org/api/ng/service/$location
$ locationProvider und html5Mode
Wir werden dies tun, wenn Sie Ihre Angular-Anwendung definieren und Ihre Routen konfigurieren.
Was ist die HTML5-Verlaufs-API? Es ist eine standardisierte Methode, um den Browserverlauf mithilfe eines Skripts zu bearbeiten. Dadurch kann Angular das Routing und die URLs unserer Seiten ändern, ohne die Seite zu aktualisieren. Weitere Informationen hierzu finden Sie in einem guten Artikel zur HTML5-Verlaufs-API:
http://diveintohtml5.info/history.html
Einstellung für relative Links
<base>
in<head>
Ihrem Dokument festlegen . Dies kann sich in der Datei root index.html Ihrer Angular-App befinden. Suchen Sie das<base>
Tag und setzen Sie es auf die Stamm-URL, die Sie für Ihre App möchten.Beispielsweise:
<base href="https://stackoverflow.com/">
Fallback für ältere Browser
Abschließend
quelle
Wenn Sie dies lokal unter OS X 10.8 konfigurieren möchten, das Angular mit Apache bereitstellt, finden Sie möglicherweise folgende Hilfen in Ihrer .htaccess-Datei:
Optionen + FollowSymlinks, falls nicht festgelegt, können zu einem verbotenen Fehler in den Protokollen führen:
Eine Umschreibbasis ist erforderlich, andernfalls werden Anforderungen an Ihren Serverstamm aufgelöst, der lokal standardmäßig nicht Ihr Projektverzeichnis ist, es sei denn, Sie haben Ihre vhosts speziell konfiguriert. Daher müssen Sie den Pfad so festlegen, dass die Anforderung Ihr Projektstammverzeichnis findet. Zum Beispiel habe ich auf meinem Computer ein Verzeichnis / Users / me / Sites, in dem ich alle meine Projekte aufbewahre. Wie das alte OS X eingerichtet.
In den nächsten beiden Zeilen wird effektiv angegeben, ob der Pfad kein Verzeichnis oder keine Datei ist. Sie müssen daher sicherstellen, dass Sie keine Dateien oder Verzeichnisse haben, die mit den Routenpfaden Ihrer App identisch sind.
Die nächste Bedingung lautet: Wenn die Anforderung nicht mit den angegebenen Dateierweiterungen endet, fügen Sie dort das hinzu, was Sie benötigen
Und das letzte [L] sagt, dass es die Datei index.html bereitstellen soll - Ihre App für alle anderen Anforderungen.
Wenn Sie immer noch Probleme haben, überprüfen Sie das Apache-Protokoll. Es gibt Ihnen wahrscheinlich nützliche Hinweise:
quelle
Im HTML5-Modus muss die URL auf der Serverseite neu geschrieben werden. Grundsätzlich müssen Sie alle Links zum Einstiegspunkt Ihrer Anwendung (z. B. index.html) neu schreiben. Das Erfordernis eines
<base>
Tags ist auch in diesem Fall wichtig, da AngularJS damit zwischen dem Teil der URL, der die Anwendungsbasis darstellt, und dem Pfad unterscheiden kann, der von der Anwendung verarbeitet werden soll. Weitere Informationen finden Sie im AngularJS-Entwicklerhandbuch - Verwenden des HTML5-Modus im Server von $ location Server Side .Aktualisieren
Gewusst wie: Konfigurieren Sie Ihren Server für die Arbeit mit html5Mode 1
Wenn Sie html5Mode aktiviert haben, wird das
#
Zeichen in Ihren URLs nicht mehr verwendet. Das#
Symbol ist nützlich, da keine serverseitige Konfiguration erforderlich ist. Ohne#
sieht die URL viel besser aus, erfordert aber auch serverseitige Umschreibungen. Hier sind einige Beispiele:Apache schreibt um
Nginx schreibt um
Azure IIS-Umschreibungen
Express-Umschreibungen
Siehe auch
quelle
In Angular 6 können Sie mit Ihrem Router Folgendes verwenden:
quelle
Sie können auch den folgenden Code verwenden, um zur Hauptseite (Startseite) umzuleiten:
Nachdem Sie Ihre Weiterleitung wie oben angegeben haben, können Sie die anderen Seiten umleiten, zum Beispiel:
quelle
** **.
** Weil
quelle