Das JavaScript-Framework Vue.js, Teil 4Routing in Vue-Anwendungen
Von
Dr. Dirk Koller
5 min Lesedauer
Zu den Komponenten von Vue-Anwendungen können ganze Unterseiten gehören, die über das Router-Plug-in erreichbar gemacht werden. Wie das Routing umgesetzt wird, ist Thema dieses Artikels.
Bestimmte Komponenten wie Log-in-Seiten lassen sich in Vue.js direkt per Router-Plug-in ansteuern.
Vue-Anwendungen bestehen aus Komponenten. Diese Komponenten können Bestandteile einer Seite sein, beispielsweise ein Header oder ein Footer. Das Einbinden solcher Bausteine geschieht durch das Verwenden des Komponenten-Tags innerhalb des Vue-Template.
Bei Komponenten kann es sich aber auch um ganze Seiten wie zum Beispiel eine About- oder Login-Seite handeln (die dann möglicherweise wiederum Komponenten beinhalten). Seiten lassen sich über das Router-Plug-in einbinden, so dass sie unter einer eigenen URL erreichbar sind.
Integration des Router-Plug-ins
Die Router-Option beim Anlegen eines Projekts mit Vue CLI.
(Bild: Dr. Koller / Vue.js)
Der Router wird am einfachsten beim Erstellen der App mitgeneriert. Das create-Kommando des CLI stellt eine entsprechende Option zur Verfügung. Die Frage nach dem History-Mode sollte bejaht werden, der andernfalls verwendete Hash-Modus bringt hässliche #-Zeichen in der URL mit sich.
Wenn das Generieren des Routers beim Anlegen des Projekts versäumt wurde, ist das auch kein Problem – er lässt sich später von Hand nachrüsten. Dazu sind drei kleine Anpassungen durchzuführen. Herzstück des Routers ist die Datei index.js im Ordner src/router. Sie wird mit folgendem Inhalt angelegt:
Wie der Code erahnen lässt, dient das routes-Array zur Definition von Pfaden, unter denen die einzelnen Seiten erreichbar sind. Damit diese Magie funktioniert, wird in der Root-Komponente in App.vue noch das Element Router View verbaut. Es bewirkt, dass an dieser Stelle abhängig von der eingegebenen URL die gewünschte Seite eingebunden wird:
In main.js ist beim Erstellen der Vue-Instanz das Router-Plug-in anzugeben:
import { createApp } from 'vue' import App from './App.vue' import router from './router'createApp(App).use(router).mount('#app')
Schließlich wird noch das Paket vue-router (hier für ein Vue 3-Projekt) mit npm installiert:
npm i vue-router@next --save
Anlegen einer Seite
Nachdem die App nun mithilfe des Assistenten oder händisch Routing-tauglich gemacht wurde, probieren wir die Funktionalität aus. Zu diesem Zweck legen wir unter src/views eine neue Seite Login.vue an. Geroutete Seiten werden getrennt von anderen Komponenten in diesem Verzeichnis aufbewahrt. Der Inhalt der Seite ist nicht relevant und kann knapp gehalten sein:
Die neue Seite erhält einen Eintrag im routes-Array in src/router/index.js. Dazu wird der Pfad angegeben, unter dem die Seite erreichbar sein soll. Weiterhin erforderlich ist die Komponente (Seite) auf die geroutet wird. Der Name ist optional.
Die Seite lässt sich nach dem Start im Development-Server durch Eingabe der URL http://localhost:8080/login im Browser aufrufen. Soll die neue Seite über einen Link, beispielsweise im Menü aufgerufen werden, empfiehlt sich die Verwendung eines Router-Links:
<router-link to="/login">Login</router-link>
Router-Links sind gegenüber “normalen”-Links (a href) für interne Verlinkungen zu bevorzugen. Sie kommen mit beiden möglichen History-Modi (Hash und HTML5) klar und brauchen nicht mehr angepasst werden, falls doch noch mal gewechselt werden soll. Wurde bei der Definition der Route ein Name vergeben, so kann diese nun alternativ auch über den Namen referenziert werden:
Das hat den Vorteil, dass die Links nun unabhängig von den konkreten Pfaden sind. Die Pfade können deshalb ohne Anpassen von Verlinkungen im Quellcode geändert werden.
Dynamische Routen
Die oben beschriebene Route ist statisch, der Pfad bleibt immer gleich. Oft möchte man stattdessen aber variable Bestandteile in der URL haben. Der Vue-Router unterstützt sowohl Pfadvariablen, bei denen Werte als Teil des Pfades übergeben werden als auch Query-Parameter, bei denen Key/Value-Paare mit ? und & am Ende der URL aufgelistet sind.
Für Pfadvariablen wird der Name der Variablen mit einem vorangestellten Doppelpunkt an den Pfad in der Route gehängt:
{ path: '/person/:userid', name: 'Person', component: Person }
Aufrufe wie person/1 oder person/34 führen nun zur gleichen Seite Person. Auf den Inhalt der Variablen kann über den Ausdruck $route.params im Script oder Template zugegriffen werden:
{{ $route.params.userid }}
Selbstverständlich lassen sich Parameter auch mit Router-Links übergeben. Dazu wird der Parameter als Eintrag params hinter to aufgeführt:
Der generierte Link lautet für das Beispiel http://localhost:8080/person/34?active=true. Der Zugriff auf Query-Variablen erfolgt über $route.query, hier also $route.query.active.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Bewachte Routen: Guards
In vielen Anwendungen sind bestimmte Teile nur für eingeloggte Benutzer oder spezielle Seiten nur für den Administrator zugänglich. Das lässt sich in Vue mit Navigation-Guards realisieren. Sie überwachen die Navigation und können im Fall ungewollter Zugriffe durch Abbruch oder Weiterleitung einschreiten.
Es gibt verschiedene Typen von Guards. Globale Guards lassen sich vor (beforeEach), zur (beforeResolve) oder nach der Navigation (afterEach) aufrufen. In den Argumenten erhält man Ziel- und Herkunfts-Route und kann darauf in der übergebenen next()-Funktion reagieren:
const router = new VueRouter({ ... })router.beforeEach((to, from, next) => { console.log("Navigation von " + from.fullPath + " nach " + to.fullPath); next(); })
Per-Route-Guards dagegen überwachen nur eine bestimmte Route und werden deshalb direkt im routes-Array definiert:
Schließlich gibt es noch In-Component-Guards in den Varianten beforeRouteEnter, beforeRouteUpdate und beforeRouteLeave, die bei der Definition der entsprechenden Komponente ausprogrammiert werden: