VorwortWenn Sie an Routing denken, denken Sie normalerweise an Bibliotheken wie React. In Wirklichkeit verwenden diese Bibliotheken und Frameworks jedoch immer noch Vanilla JavaScript. Wie können wir das also erreichen? Ich hoffe, dass dieses „JavaScript-Routing-Tutorial“ Ihnen dabei hilft zu verstehen, wie Sie Ihre eigenen Router in nativem JS schreiben. EinführungIch treffe viele Leute, die aus verschiedenen Gründen ihre eigene Route erstellen möchten. Da Sie diesen Artikel lesen, bedeutet das, dass Sie möglicherweise einer von ihnen sind! Am wichtigsten ist, dass die Verwendung von VanillaJSRouter Ihre Abhängigkeit von Frameworks reduziert. Es ist relativ einfach, Ihr eigenes Routing in Vanilla JavaScript zu erstellen, solange Sie alle an der Implementierung beteiligten Teile verstehen. Dies sind die wichtigsten Dinge, die Sie beim Erstellen Ihres eigenen JS-Routers wissen sollten: 1. Der Schlüssel zum nativen JS-Routing ist die Eigenschaft location.pathname. 2. Achten Sie auf das Ereignis „popstate“ als Reaktion auf Änderungen an .pathname. Dies geschieht immer dann, wenn eine neue URL in die Adressleiste des Browsers eingegeben wird, wir die Seite jedoch nicht aktualisieren möchten, sondern nur die Ansicht durch das Laden neuer Inhalte auffrischen möchten. 3. Sie können Routen im Array routes[] speichern. 4. Zum Parsen der URL müssen reguläre Ausdrücke ( RegEx ) in JavaScript verwendet werden. 5. Wenn Sie das Routing in die native Browserarchitektur integrieren möchten, sind grundlegende Kenntnisse des Verlaufs und von history.pushState (History-API von JavaScript) unerlässlich. Zuerst beschäftigen wir uns mit der History-API. JavaScript History APIIch habe viele Vanilla-JS-Router- Tutorials gesehen, in denen die JavaScript History API nicht erwähnt wurde. Das ist schade, denn wenn Sie auf die Zurück- und Vorwärts-Schaltflächen Ihres Browsers klicken, navigieren Sie zu URLs in Ihrem Browserverlauf. Ohne die History-API gibt es keine Möglichkeit, über das Routing zu sprechen. 1.history.back() ist dasselbe wie history.go(-1) oder wenn der Benutzer im Browser auf die Zurück-Schaltfläche klickt. Sie können auf beide Arten den gleichen Effekt erzielen. 2. Wenn der Benutzer die Vorwärts-Schaltfläche des Browsers drückt, wird history.forward() ausgeführt, was äquivalent zu history.go(1)" ist. 3.go() ähnelt den Methoden .back() und forward(), außer dass Sie die Anzahl der Schritte angeben können, um im Browserverlaufsstapel vorwärts oder rückwärts zu gehen. . 4. pushState() überträgt den neuen Status an die History-API. 5. Die Längeneigenschaft ist die Anzahl der Elemente im Sitzungsverlauf. 6..Die Eigenschaft „state“ wird verwendet, um den Status zu ermitteln, ohne auf das Ereignis „popstate“ zu hören. Implementieren Sie Ihr eigenes natives JS-RoutingVanilla JS-Routingeinstellungen basierend auf der History-APISchauen wir uns zunächst den minimalen Code genauer an, der zum Erstellen eines URL-Umschalters erforderlich ist ( ohne die Seite zu aktualisieren ). Anschließend zeige ich Ihnen in einem GIF, wie er funktioniert. <html> <Kopf> <title>Hallo</title> <Skripttyp = "Modul"> Funktion select_tab(id) { // ausgewählte Klasse von allen Schaltflächen entfernen document.querySelectorAll(".route").fürEach(item => item.classList.remove('ausgewählt')); // angeklicktes Element auswählen (visuell) document.querySelectorAll("#" + id).fürEach(item => item.classList.add('ausgewählt')); } Funktion load_content(id) { //Text aktualisieren „Inhalt wird für {id} geladen …“ // Natürlich würden Sie hier Ihre Inhalte laden Magie // Führen Sie ggf. Fetch API aus, um die Ressourcen zu aktualisieren document.querySelector("#content").innerHTML = 'Inhalt wird geladen für /' + id + '...'; } Funktion push(Ereignis) { // ID-Attribut des angeklickten Felds, Buttons oder Links abrufen Lassen Sie id = Ereignis.Ziel.id; // Visuelle Auswahl der angeklickten Schaltfläche/Registerkarte/Box Wählen Sie Tab(id); // Titel im Windows-Tab aktualisieren Dokument.Titel = ID; // Inhalt für diese Registerkarte/Seite laden Inhalt laden(id); // Abschließend Statusänderung in die Adressleiste pushen window.history.pushState({id}, `${id}`, `/seite/${id}`); } window.onload = Ereignis => { //Historisches Push()-Ereignis hinzufügen, wenn auf Kästchen geklickt wird Fenster["Home"].addEventListener("Klick", Ereignis => Push(Ereignis)) Fenster["Über"].addEventListener("Klicken", Ereignis => Push(Ereignis)) Fenster["Galerie"].addEventListener("Klick", Ereignis => Push(Ereignis)) Fenster["Kontakt"].addEventListener("Klick", Ereignis => Push(Ereignis)) Fenster["Hilfe"].addEventListener("Klick", Ereignis => Push(Ereignis)) } // Auf PopStateEvent warten (Zurück- oder Vorwärts-Schaltflächen werden angeklickt) window.addEventListener("popstate", Ereignis => { // Erfassen Sie die Status-ID des Verlaufs Lassen Sie stateId = event.state.id; // Angeklickte ID in der Konsole anzeigen (nur zum Spaß) console.log("stateId = ", stateId); // Visuelle Auswahl der angeklickten Schaltfläche/Registerkarte/Box Wählen Sie Tab(Status-ID); // Inhalt für diese Registerkarte/Seite laden Inhalt laden(id); }); </Skript> <Stil> * { /* globale Schriftart */ Schriftfamilie: Verdana; Schriftgröße: 18px; } #root { Anzeige: flex; Flex-Richtung: Zeile; } #Inhalt { Anzeige: flex; Anzeige: Block; Breite: 800px; Höhe: 250px; /* vertikal zentrierter Text */ Zeilenhöhe: 250px; Rand: 2px durchgezogen #555; Rand: 32px; Textausrichtung: zentriert; } .route { Cursor: Zeiger; Inhalt ausrichten: zentriert; Breite: 150px; Höhe: 50px; /* vertikal zentrierter Text */ Zeilenhöhe: 50px; Position: relativ; Rand: 2px durchgezogen #555; Hintergrund: weiß; Textausrichtung: zentriert; Rand: 16px; } .route.selected { Hintergrund: gelb; } </Stil> </Kopf> <Text> <Abschnitts-ID = "Stamm"> <Abschnittsklasse = "Route" id = "Home">/Home</Abschnitt> <Abschnitt Klasse = "Route" ID = "Über">/Über</Abschnitt> <Abschnittsklasse = "Route" id = "Galerie">/Galerie</Abschnitt> <Abschnittsklasse = "Route" id = "Kontakt">/Kontakt</Abschnitt> <Abschnitt Klasse = "Route" ID = "Hilfe">/Hilfe</Abschnitt> </Abschnitt> <main id = "content">Inhalt wird geladen...</main> </body> </html> Der Kern besteht darin, window.history.pushState({id}, ${id}, /page/${id}) aufzurufen. Der erste Parameter ist die eindeutige ID des Status, der zweite ist der Text „Tab-Titel“ und der dritte Parameter ist der Pfad, der in der Adressleiste angezeigt werden soll. Dadurch kann der Browser die URL ändern, ohne die Seite neu zu laden. Ergebnis. Jetzt ändert sich jedes Mal, wenn wir auf die Schaltfläche klicken, die URL in der Adressleiste des Browsers. Auch die Inhaltsbox wird aktualisiert. Unser nativer JS-Router ist jetzt betriebsbereit. Beachten Sie, dass bei jedem Klicken auf die Schaltfläche history.pushState ausgelöst wird. Wir übergeben ihm einfach die ID des angeklickten Elements, die im ID-Attribut des Elements gespeichert ist: Home, About, Gallery usw. Sie sollten der tatsächlichen Seite entsprechen, zu der Sie navigieren. Dies ist natürlich nicht die einzige Möglichkeit, Seitennamen zu speichern. Sie können array[] oder eine andere Methode verwenden. So wird es in diesem Beispiel gemacht. Natürlich müssen wir auch das Layout und die Ressourcen für diesen Standort vom Server laden. Das hängt von Ihrem Programm ab. Es könnte alles sein. So funktionieren die Schaltflächen „Zurück“ und „Vorwärts“Durch die Verwendung von history.pushState navigieren Sie mit den Schaltflächen „Zurück“ und „Vorwärts“ automatisch zum vorherigen bzw. nächsten Status. Dadurch wird ein Popstate-Ereignis generiert. Dies ist der Teil, in dem Sie die Ansicht erneut aktualisieren müssen. ( Das erste Mal ist, wenn wir auf die Schaltfläche klicken .) Da das Ereignis jedoch die ID des Klicks enthält, lässt sich die Ansicht ganz einfach aktualisieren und der Inhalt neu laden, wenn auf „Zurück“ oder „Vorwärts“ geklickt wird. Wir verwenden hier weder React noch Vue, daher ist in meinem Quellcode load_content für die Aktualisierung der Ansicht direkt im DOM verantwortlich. Dieser Bereich kann mit Inhalten gefüllt sein, die von Ihrer API geladen wurden. Da dies nur ein „Front-End“-Beispiel ist, kann ich Ihnen nicht viel zeigen. Aber so funktioniert es auf der Clientseite . Initialisieren Sie die serverseitige Routing-LastUm alles zusammenzufügen, ist noch ein weiterer Schritt erforderlich. In meinem Beispiel wurde nur router.html verwendet. Wenn Sie diese Route zum ersten Mal in Ihre PWA laden, müssen Sie sicherstellen, dass sie funktioniert, wenn Sie /page/home direkt in die Adressleiste eingeben. Bisher haben wir nur die Routeradresse vom Frontend aus geändert. Gehen Sie davon aus, dass jedes Mal, wenn Sie zu einer URL navigieren, die auf einer Router-Schaltfläche angezeigt wird, diese URL tatsächlich einzeln vom Server geladen wird. Es liegt daher in Ihrer Verantwortung, sicherzustellen, dass der Router und die Seite /page/about in die Stammansicht Ihrer Anwendung geladen werden. Außerdem sollte die Schaltfläche „Aktuell“ hervorgehoben werden. Nach der Implementierung ist Ihre Weiterleitung abgeschlossen. Wie Sie den Inhalt innerhalb des #content-Elements neu laden, hängt ganz von Ihnen und Ihrem Backend-Design ab. Oben finden Sie Einzelheiten dazu, wie Sie Ihren eigenen nativen JavaScript-Router erstellen. Weitere Informationen zum Erstellen nativer JavaScript-Router finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Analyse der Implementierungsmethode der Koexistenz von Nginx und Apache unter Linux-Servern
Erklärung auf der offiziellen Website: Wenn eine ...
Nachteile von Tabellen 1. Tabellen nehmen mehr Byt...
Vorwort Wenn Sie das Attribut „overflow: scroll“ ...
Wenn Sie nach der Installation der Datenbank das ...
Dieser Artikel gibt Ihnen den spezifischen Code v...
Verwenden Sie den folgenden Befehl, um einen Cont...
Inhaltsverzeichnis 1. Einleitung 2. Grundsatz Pra...
Mysql Workbench ist ein Open-Source-Datenbankclie...
1. Starten Sie den Docker-Container Starten Sie m...
bmi Voyager Heugabel Ulster Lebensmittelhändler F...
Aus Sicherheitsgründen erlaubt MySql-Server nur d...
Zwei Beispiele für die Verwendung des „a“-Tags in...
So ändern Sie den Speicherort des MySQL-Datenbank...
In diesem Experiment konfigurieren wir die standa...
Linux ist derzeit das am weitesten verbreitete Se...