مدیریت فرمها در Vue.js
مدیریت فرمها در Vue.js با استفاده از دادههای واکنشی و دستورات بایندینگ (v-model) بسیار ساده و کارآمد است. Vue به شما امکان میدهد فرمها را بهصورت پویا مدیریت کنید و اعتبارسنجیهای لازم را اعمال نمایید.
1. استفاده از v-model برای بایندینگ دادهها
v-model مقدار یک ورودی را به متغیر همگامسازی دوطرفه (Two-Way Binding) میکند.
<div>
<input type="text" v-model="name" placeholder="نام خود را وارد کنید" />
<p>نام شما: {{ name }}</p>
</div>
</template>
<script>
export default {
data() {
return {
name: ""
};
}
};
</script>
2. مدیریت چندین ورودی فرم
Vue میتواند انواع ورودیهای فرم را مدیریت کند، از جمله:
ورودی متنی، چکباکس، رادیو، انتخابگر (select) و تکستاریا.
<div>
<label>نام:</label>
<input v-model="formData.name" type="text" />
<label>ایمیل:</label>
<input v-model="formData.email" type="email" />
<label>جنسیت:</label>
<input v-model="formData.gender" type="radio" value="مرد" /> مرد
<input v-model="formData.gender" type="radio" value="زن" /> زن
<label>علاقهمندیها:</label>
<input v-model="formData.hobbies" type="checkbox" value="ورزش" /> ورزش
<input v-model="formData.hobbies" type="checkbox" value="موسیقی" /> موسیقی
<label>کشور:</label>
<select v-model="formData.country">
<option value="ایران">ایران</option>
<option value="آلمان">آلمان</option>
<option value="آمریکا">آمریکا</option>
</select>
<button @click="submitForm">ارسال</button>
<pre>{{ formData }}</pre>
</div>
</template>
<script>
export default {
data() {
return {
formData: {
name: "",
email: "",
gender: "",
hobbies: [],
country: ""
}
};
},
methods: {
submitForm() {
console.log("اطلاعات فرم:", this.formData);
alert("فرم ارسال شد!");
}
}
};
</script>
3. کنترل ارسال فرم با prevent
با submit.prevent@ میتوان از رفرش شدن صفحه هنگام ارسال فرم جلوگیری کرد.
<form @submit.prevent="submitForm">
<input v-model="name" type="text" placeholder="نام" />
<button type="submit">ارسال</button>
</form>
</template>
<script>
export default {
data() {
return { name: "" };
},
methods: {
submitForm() {
alert(`نام ارسال شد: ${this.name}`);
}
}
};
</script>
4. اعتبارسنجی (Validation) دادهها
میتوان دادههای فرم را قبل از ارسال بررسی کرد.
<div>
<input v-model="email" type="email" placeholder="ایمیل" />
<p v-if="emailError" style="color: red">{{ emailError }}</p>
<button @click="validateForm">ارسال</button>
</div>
</template>
<script>
export default {
data() {
return { email: "", emailError: "" };
},
methods: {
validateForm() {
if (!this.email.includes("@")) {
this.emailError = "ایمیل معتبر نیست!";
} else {
this.emailError = "";
alert("فرم با موفقیت ارسال شد!");
}
}
}
};
</script>
5. مدیریت فرمهای داینامیک
گاهی لازم است تعداد فیلدها بهصورت داینامیک اضافه شود.
<div>
<button @click="addField">افزودن فیلد</button>
<div v-for="(item, index) in fields" :key="index">
<input v-model="item.value" placeholder="مقدار وارد کنید" />
<button @click="removeField(index)">❌</button>
</div>
<button @click="submitForm">ارسال</button>
<pre>{{ fields }}</pre>
</div>
</template>
<script>
export default {
data() {
return { fields: [{ value: "" }] };
},
methods: {
addField() {
this.fields.push({ value: "" });
},
removeField(index) {
this.fields.splice(index, 1);
},
submitForm() {
console.log("دادههای فرم:", this.fields);
}
}
};
</script>
جمعبندی
✔ v-model برای بایندینگ دوطرفه استفاده میشود.
✔ چندین نوع ورودی مانند متن، رادیو، چکباکس، و انتخابگر پشتیبانی میشوند.
✔ با prevent میتوان از ارسال ناخواسته فرم جلوگیری کرد.
✔ اعتبارسنجی دادهها قبل از ارسال انجام میشود.
✔ فرمهای داینامیک برای افزودن یا حذف ورودیها مدیریت میشوند.
