我正在制作一个静态网站,但需要联系表单,该表单应将表单数据发送到电子邮件,我正在使用 Nuxt.js 3,已尝试使用 useFetch(),也尝试使用 axios。
以下是我的代码:
Contact Vue 模板
<template>
<section id="ng-ctt" class="ng-ctt">
<div class="ng-ct">
<div class="ng-fx">
<div class="ng-fx6-m">
<figure class="ng-ctt-img">
<img src="~/assets/media/illustrations/contact.svg" alt="ctt img" class="ng-img">
</figure>
</div>
<div class="ng-fx6-m">
<div class="ng-fxc">
<div class="ng-ctt-text">
<span class="ng-title">Mail</span>
<NuxtLink to="mailto:hi@paddi.ng" class="ng-link">hi@paddi.ng</NuxtLink>
</div>
<div class="ng-ctt-text">
<span class="ng-title">Location</span>
<span class="ng-text">Lagos, Nigeria</span>
</div>
<div class="ng-ctt-text">
<span class="ng-ctt-text-or">OR</span>
</div>
<form @submit.prevent="submitForm" id="ng-fm" class="ng-fm">
<div class="ng-fm-row">
<input type="text" v-model="formData.full_name" class="ng-inp" placeholder="Full Name">
</div>
<div class="ng-fm-row">
<input type="text" v-model="formData.email" class="ng-inp" placeholder="Email">
</div>
<div class="ng-fm-row">
<input type="text" v-model="formData.phone_no" class="ng-inp" placeholder="Phone Number">
</div>
<div class="ng-fm-row">
<input type="text" v-model="formData.service" class="ng-inp" placeholder="Service">
</div>
<div class="ng-fm-row">
<textarea name="" v-model="formData.message" class="ng-inp" placeholder="Message"></textarea>
</div>
<div class="ng-fm-row">
<button class="ng-bt-pri" type="submit">Send Message</button>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
</template>
联系脚本
<script lang="ts" setup>
interface formData {
full_name: string,
email: string,
phone_no: string,
service: string,
message: string,
}
let formStatus: {} = {
loading: false,
success: false,
error: false,
}
let formData: formData = {
full_name: "",
email: "",
phone_no: "",
service: "",
message: "",
};
async function submitForm() {
// console.log(data);
// console.log(JSON.stringify(formData));
// this.formStatus.loading = true,
// await this.$axios.$post("/api/contact", {
// full_name: this.full_name,
// email: this.email,
// phone_name: this.phone_name,
// service: this.service,
// message: this.message
// }).then(response => {
// this.success = true
// this.errored =false
// }).catch(error => {
// this.errored = true
// }).finally(() => {
// this.loading = false
// });
}
// return {
// formData: formData
// }
</script>
主要问题是如何在Nuxtjs 3中以POST请求发送表单数据。
formData
应该是 Vue 组件的一部分。添加data () { return { formData } }
- https://v2.vuejs.org/v2/api/?redirect=true#data - wendt88