Anleitung
Vue-Kontaktformular (kein Backend nötig)
Vue ist ein clientseitiges Framework, aber das Kontaktformular, das Sie ausliefern, braucht kein Backend auf Ihrer Seite. Verwenden Sie das einfache HTML-Formular-Action in jeder Vue-Vorlage oder eine Vue-3-SFC mit <script setup> und fetch für eine Inline-Erfolgs-/Fehler-UX.
Verwenden Sie ein einfaches HTML-Formular
Sie benötigen keine API-Route. Das Formular sendet direkt an Formhook, und Ihr Framework muss die Einsendung nie selbst verarbeiten.
<form action="https://formhook.app/f/YOUR_API_KEY" method="POST">
<label>
Email
<input type="email" name="email" required />
</label>
<label>
Message
<textarea name="message" required></textarea>
</label>
<!-- honeypot: bots fill this; humans don't see it -->
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off" hidden />
<!-- optional: send users to a thank-you page after a native POST -->
<input type="hidden" name="_redirect" value="https://example.com/thanks" />
<button type="submit">Send</button>
</form>Oder mit fetch in Vue senden
Verwenden Sie diese Variante, wenn Sie client-seitige Erfolgs-/Fehlerzustände ohne vollständigen Seiten-Reload möchten.
<!-- src/components/ContactForm.vue -->
<script setup lang="ts">
import { ref } from "vue";
type Status = "idle" | "sending" | "ok" | "error";
const status = ref<Status>("idle");
async function onSubmit(e: Event) {
e.preventDefault();
status.value = "sending";
const form = e.target as HTMLFormElement;
const data = Object.fromEntries(new FormData(form));
const res = await fetch("https://formhook.app/f/YOUR_API_KEY", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
status.value = res.ok ? "ok" : "error";
if (res.ok) form.reset();
}
</script>
<template>
<p v-if="status === 'ok'">Thanks - we'll be in touch.</p>
<form v-else @submit="onSubmit">
<input type="email" name="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required />
<input type="text" name="_gotcha" tabindex="-1" hidden />
<button type="submit" :disabled="status === 'sending'">
{{ status === "sending" ? "Sending…" : "Send" }}
</button>
<p v-if="status === 'error'">Something went wrong. Please try again.</p>
</form>
</template>So funktioniert es
Das einfache HTML-Formular funktioniert in jeder Vue-Vorlage - es ist nur Markup. Für einen Inline-Erfolgs-/Fehler-Flow verwendet das SFC-Snippet <script setup> mit einer ref-gestützten Status-State-Machine und einem fetch-Aufruf an formhook.app/f/YOUR_API_KEY. Object.fromEntries(new FormData(form)) als JSON serialisiert ist die sauberste Payload-Form; Formhook akzeptiert auch form-encoded und multipart.
Was als Nächstes passiert
- Einsendung landet innerhalb einer Sekunde in Ihrem Formhook-Dashboard.
- Push-Benachrichtigung wird auf allen aktivierten Geräten ausgelöst.
- Antworten Sie direkt aus dem Dashboard (Pro und höher) - besonders nützlich für reine SPA-Deploys ohne E-Mail-Versandkapazität.
Veröffentlichen Sie heute Ihr Vue-Kontaktformular.
Kostenlos registrieren, Formular erstellen, API-Schlüssel einfügen. Fünf Minuten.
Kostenlos startenKostenlose Stufe: 5 Formulare · 250 Einsendungen/Monat · Keine Kreditkarte.
Vue-Kontaktformular - FAQ
- Brauche ich ein Backend oder einen Node-Server für dieses Vue-Kontaktformular?
- Nein. Das Formular sendet direkt an Formhook, also kann Ihre Vue-App eine reine statische SPA bleiben. Mit Vite bauen, den dist/-Ordner auf jedes CDN deployen.
- Kann ich das mit Pinia / Vue-Router-State verwenden?
- Ja - das Snippet ist eine in sich geschlossene SFC, aber Sie können den Status-State in Pinia heben oder Vue Router verwenden, um nach Erfolg zu einer separaten Dankes-Route zu navigieren.
- Was, wenn ich die Options-API statt <script setup> verwende?
- Dasselbe fetch-Muster funktioniert in einem methods.onSubmit-Handler mit data() { return { status: 'idle' } }. Nur die Syntax unterscheidet sich - Formhook ist es egal, welchen Vue-Stil Sie verwenden.
Anleitungen für andere Frameworks
Migrating from Formspree? See how Formhook compares.