Skip to main content

Was ist Vue.js?

Vue.js (im Folgenden Vue) ist ein progressives JavaScript-Framework zum Aufbau von Benutzeroberflächen. „Progressiv” meint, dass Sie klein beginnen und bei Bedarf Funktionen ergänzen können – von der partiellen Integration in bestehende HTML-Seiten bis zum vollständigen SPA. Der Kern von Vue ist Reaktivität. Bei Datenänderungen aktualisiert sich das DOM automatisch; Sie müssen nicht manuell verwalten, wann welches Element aktualisiert wird.
Diese Seite behandelt Vue 3 mit Inertia v3. Die Starterkits von Laravel 13 verwenden diese Konstellation standardmäßig.

Options API und Composition API

Vue 3 bietet zwei Stile: die Options API und die Composition API. Die Options API ist der klassische Stil aus Vue 2. Komponenten werden über Options-Objekte wie data, methods, computed und mounted beschrieben.
Die Composition API ist der neue Stil aus Vue 3. In Kombination mit der <script setup>-Syntax lässt sich Code besonders knapp schreiben. Auch Wiederverwendbarkeit von Logik und TypeScript-Integration sind sehr gut.
In den Starterkits Inertia × Laravel ist der Composition-API-Stil mit <script setup> Standard. Alle Beispiele auf dieser Seite verwenden ebenfalls <script setup>.

Rolle in Laravel

Historie

Vue und Laravel haben eine lange gemeinsame Geschichte, die mit Laravel 5.3 (2016) und der Einführung von Vue als Standard-Frontend-Framework beginnt. Damals war Vue in package.json enthalten, ebenso eine Beispielkomponente resources/js/components/ExampleComponent.vue. Mit Laravel 6 (2019) wurde das Auth-Scaffold in das Paket laravel/ui ausgelagert; auch das Vue-Scaffold zog in dieses Paket um. Aktueller Standard ist die Inertia-+-Vue-Konfiguration, die über das Starterkit von laravel new gewählt wird. Für Laravel-Nutzer ist Vue das vertrauteste JS-Framework; auch die Lernressourcen sind reichhaltig.

Aktueller Standard: Inertia × Vue

Der Standard-Ansatz für Vue in Laravel ist Inertia × Vue. Inertia realisiert die „moderne Monolith”-Architektur, bei der Daten aus dem Laravel-Controller direkt an Vue-Komponenten gehen, ohne API-Design.

Setup

Via Starterkit (empfohlen)

Für neue Projekte ist das Starterkit am komfortabelsten.
Wenn Sie im interaktiven Prompt Vue wählen, wird automatisch alles Folgende eingerichtet:
  • inertiajs/inertia-laravel (serverseitiger Adapter)
  • @inertiajs/vue3 (Client-Adapter)
  • vue (Vue 3 selbst)
  • @vitejs/plugin-vue (Vite-Plugin)
  • Middleware HandleInertiaRequests
  • Auth-Seiten für Login, Registrierung u. a. (bereits mit Inertia + Vue umgesetzt)

Manuelle Installation

Für die Ergänzung in einem bestehenden Projekt installieren Sie Server- und Client-Seite separat.
Ergänzen Sie das Vue-Plugin in vite.config.js:
Starten Sie die Inertia-App in resources/js/app.js.
Details zur manuellen Installation (Root-Template, Middleware-Registrierung usw.) finden Sie in der offiziellen Inertia-Dokumentation.

Verzeichnisstruktur

Im Starterkit werden Vue-Page-Komponenten unter resources/js/pages/ abgelegt.
Inertia::render('Posts/Index', [...]) verweist auf resources/js/pages/Posts/Index.vue.

Vue-Template-Syntax

Die grundlegenden Direktiven, die Sie zum Lesen und Schreiben von Starterkit-Code benötigen:

{{ }} – Variablen-Interpolation

Mit doppelten geschweiften Klammern binden Sie JavaScript-Werte und -Ausdrücke ins Template ein.

v-if – Bedingte Anzeige

Entspricht {#if} in Svelte und dem ternären Operator in React.

v-for – Listen darstellen

Für effizientes Diffing ist :key zwingend. Entspricht Array.map() in React.

v-model – Zwei-Wege-Binding

Mit v-model synchronisieren Sie den Wert eines Formularelements bidirektional mit einer reaktiven Variablen.

: (v-bind) und @ (v-on)

  • :attr="value" – dynamischen Wert an ein HTML-Attribut binden (Kurzform von v-bind:attr)
  • @event="handler" – Event-Listener registrieren (Kurzform von v-on:event)

Grundlagen der Page-Komponente

Eine Inertia-Page-Komponente ist eine gewöhnliche Vue-Komponente. Die aus dem Laravel-Controller übergebenen Daten stehen als Props zur Verfügung.

Controller

Vue-Page-Komponente

Nach defineProps() verwenden Sie die vom Controller übergebenen Daten direkt im Template. Eine REST-API ist nicht nötig.
Die von @inertiajs/vue3 bereitgestellte <Link>-Komponente sorgt für Seitenwechsel per XHR und vermeidet ein Full-Page-Reload.
Die Schreibweise gleicht einem <a>-Tag; im Hintergrund tauscht Inertia nur die Page-Komponente aus.

Die Form-Komponente

Die <Form>-Komponente von @inertiajs/vue3 ist der empfohlene Stil aus den Starterkit-Auth-Screens. Sie geben action und method als Props an und greifen mit v-slot auf errors und processing zu.

Grundlegende Verwendung

v-slot="{ errors, processing }" ist die Scoped-Slot-Syntax von Vue; die Form-Komponente berechnet diese Werte automatisch und übergibt sie. Statt v-model verwenden Sie das native HTML-name-Attribut, sodass die Formulardatenerfassung des Browsers funktioniert.

Muster aus dem Starterkit

Die Starterkits verwalten Routen mit Wayfinder als Objekte. store.form() liefert ein Objekt mit action und method, das per v-bind an <Form> per Spread übergeben wird.
Die in reset-on-success angegebenen Felder werden bei erfolgreichem Absenden automatisch zurückgesetzt. Nutzen Sie das etwa für Passwortfelder, die nach dem Absenden geleert werden sollen.
Ohne Wayfinder verhalten sich action="/login" und Co. identisch, sobald Sie die URL direkt übergeben.

Der useForm-Helper

Für die Formularverarbeitung nutzen Sie den useForm-Helper aus @inertiajs/vue3. State-Handling, Absenden und Fehleranzeige lassen sich damit schlank umsetzen.

Auf der Controller-Seite

Vue-Formular-Komponente

Wichtige Eigenschaften des Rückgabewerts von useForm: Bei Validierungsfehlern behält useForm die Eingaben und zeigt die Fehler an. In Verbindung mit v-model entsteht ein nahtloses Formularerlebnis.

Shared Data

Daten, die auf allen Seiten gemeinsam gebraucht werden (angemeldeter Nutzer, Flash-Messages u. a.), definieren Sie in der Methode share() der Middleware HandleInertiaRequests.
In Vue-Komponenten greifen Sie mit usePage() auf Shared Data zu.
Da Shared Data in jeder Anfrage enthalten sind, empfiehlt sich die Beschränkung auf das Nötigste. Eine Lazy-Evaluation per fn() wird nur ausgewertet, wenn tatsächlich zugegriffen wird.

Grundlagen der Reaktivität in Vue 3

Wichtige Reaktivitäts-APIs für Inertia × Vue:

ref – primitive reaktive Werte

computed – berechnete Werte

onMounted – Verarbeitung nach dem Mount


Fazit

Vue.js harmoniert hervorragend mit Laravel und entfaltet insbesondere im „modernen Monolithen” mit Inertia seine Stärken. Mit Inertia × Vue erhalten Sie die Einfachheit des Laravel-Backends und die reaktive Vue-UI gleichermaßen. Legen Sie ein Projekt mit dem Starterkit an, sind auch die Auth-Screens sofort einsatzbereit.

Offizielle Inertia.js-Dokumentation

Alle Funktionen von Inertia v3 finden Sie in der offiziellen Dokumentation.
Zuletzt geändert am 13. Juli 2026