← All Guides
Vue Forms
Add codaForms to your Vue.js application with reactive form handling.
5 minutes Intermediate
Composition API (Vue 3)
<script setup>
import { ref } from 'vue'
const status = ref('idle')
const FORM_ID = 'cf_xxxxx'
async function handleSubmit(e) {
status.value = 'submitting'
const formData = new FormData(e.target)
const data = {
_formId: FORM_ID,
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
}
try {
const res = await fetch('https://codasite.ai/forms/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
})
const result = await res.json()
status.value = result.success ? 'success' : 'error'
} catch {
status.value = 'error'
}
}
</script>
<template>
<div v-if="status === 'success'" class="success">
Thanks! We'll be in touch soon.
</div>
<form v-else @submit.prevent="handleSubmit">
<input name="name" placeholder="Name" required />
<input name="email" type="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required></textarea>
<button :disabled="status === 'submitting'">
{{ status === 'submitting' ? 'Sending...' : 'Send' }}
</button>
</form>
</template> Options API (Vue 2/3)
export default {
data() {
return {
status: 'idle',
formId: 'cf_xxxxx'
}
},
methods: {
async handleSubmit(e) {
this.status = 'submitting'
const formData = new FormData(e.target)
const res = await fetch('https://codasite.ai/forms/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
_formId: this.formId,
name: formData.get('name'),
email: formData.get('email'),
message: formData.get('message'),
}),
})
const result = await res.json()
this.status = result.success ? 'success' : 'error'
}
}
}