1. การจัดการฟอร์มใน Vue.js
การจัดการฟอร์มใน Vue.js ทำได้ง่ายด้วยการใช้ v-model
ซึ่งเป็น Directive สำหรับการ Binding ข้อมูลแบบสองทาง (Two-Way Binding) ช่วยให้ฟอร์มสามารถรับและแสดงข้อมูลใน data
ได้แบบอัตโนมัติ
ตัวอย่างการใช้งานฟอร์มพื้นฐาน
<template>
<div>
<h1>Form Example</h1>
<form @submit.prevent="handleSubmit">
<label for="name">Name:</label>
<input id="name" v-model="formData.name" type="text" placeholder="Enter your name" />
<label for="email">Email:</label>
<input id="email" v-model="formData.email" type="email" placeholder="Enter your email" />
<button type="submit">Submit</button>
</form>
<p>Name: {{ formData.name }}</p>
<p>Email: {{ formData.email }}</p>
</div>
</template>
<script>
export default {
data() {
return {
formData: {
name: '',
email: ''
}
};
},
methods: {
handleSubmit() {
alert(`Submitted! Name: ${this.formData.name}, Email: ${this.formData.email}`);
}
}
};
</script>
คำอธิบาย:
- ใช้
v-model
สำหรับการเชื่อมโยงข้อมูลในฟอร์มกับformData
- ใช้
@submit.prevent
เพื่อป้องกันการรีเฟรชหน้าเมื่อส่งฟอร์ม
2. การตรวจสอบข้อมูล (Form Validation)
Vue.js รองรับการตรวจสอบข้อมูลฟอร์มได้อย่างง่ายดาย คุณสามารถเพิ่มการตรวจสอบใน methods
หรือใช้ Library เช่น VeeValidate
การตรวจสอบข้อมูลแบบพื้นฐาน
<template>
<div>
<h1>Form Validation</h1>
<form @submit.prevent="validateForm">
<label for="name">Name:</label>
<input id="name" v-model="formData.name" type="text" />
<span v-if="errors.name" style="color: red">{{ errors.name }}</span>
<label for="email">Email:</label>
<input id="email" v-model="formData.email" type="email" />
<span v-if="errors.email" style="color: red">{{ errors.email }}</span>
<button type="submit">Submit</button>
</form>
</div>
</template>
<script>
export default {
data() {
return {
formData: {
name: '',
email: ''
},
errors: {
name: '',
email: ''
}
};
},
methods: {
validateForm() {
this.errors = { name: '', email: '' }; // Reset errors
if (!this.formData.name) {
this.errors.name = 'Name is required';
}
if (!this.formData.email) {
this.errors.email = 'Email is required';
} else if (!this.validateEmail(this.formData.email)) {
this.errors.email = 'Invalid email address';
}
if (!this.errors.name && !this.errors.email) {
alert('Form submitted successfully!');
}
},
validateEmail(email) {
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return re.test(email);
}
}
};
</script>
คำอธิบาย:
- ใช้
errors
เพื่อเก็บข้อความแสดงข้อผิดพลาด - ใช้ฟังก์ชัน
validateForm
เพื่อตรวจสอบข้อมูลก่อนส่งฟอร์ม
3. การใช้ Library สำหรับ Form Validation
ติดตั้ง VeeValidate
npm install vee-validate@next
ตัวอย่างการใช้งาน VeeValidate
<template>
<div>
<h1>Form with VeeValidate</h1>
<form @submit.prevent="onSubmit">
<label for="name">Name:</label>
<input id="name" v-model="name" type="text" />
<span style="color: red">{{ errors.name }}</span>
<label for="email">Email:</label>
<input id="email" v-model="email" type="email" />
<span style="color: red">{{ errors.email }}</span>
<button type="submit">Submit</button>
</form>
</div>
</template>
<script>
import { ref } from 'vue';
import { useField, useForm } from 'vee-validate';
import * as yup from 'yup';
export default {
setup() {
const { handleSubmit, errors } = useForm();
const { value: name } = useField('name', yup.string().required('Name is required'));
const { value: email } = useField('email', yup.string().email('Invalid email').required('Email is required'));
const onSubmit = handleSubmit(values => {
alert(`Form submitted with: ${JSON.stringify(values)}`);
});
return {
name,
email,
errors,
onSubmit
};
}
};
</script>
คำอธิบาย:
- ใช้
yup
เพื่อกำหนดกฎการตรวจสอบข้อมูล - ใช้
useField
และuseForm
จาก VeeValidate สำหรับจัดการฟอร์มและข้อผิดพลาด
4. สรุป
ในบทนี้ คุณได้เรียนรู้:
- การจัดการฟอร์มด้วย
v-model
และการส่งข้อมูล - การตรวจสอบข้อมูลด้วยวิธีพื้นฐานและการใช้ Library เช่น VeeValidate
ในบทถัดไป เราจะศึกษาการเพิ่ม Transition และ Animation ให้กับ Vue.js Component!