vue3+ts实现一个表单组件
1. 创建表单组件
首先,创建一个表单组件,包括姓名、手机号、年龄、学校、性别等基本信息的输入框,并添加省市区和街道地点的选择功能。
(图片来源网络,侵删)
男
女
省市区
街道
提交
import { ref } from 'vue';
import axios from 'axios';
const formData = ref({
name: '',
phone: '',
age: undefined,
school: '',
gender: 'male', // 默认选项
district: [], // 省市区选择结果
street: [], // 街道选择结果(多选)
});
const formRules = ref({
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' },
],
age: [
{ required: true, message: '请输入年龄', trigger: 'blur' },
{ type: 'number', min: 1, max: 150, message: '请输入1-150之间的数字', trigger: 'blur' },
],
school: [{ required: true, message: '请输入学校名称', trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
district: [{ required: true, message: '请选择省市区', trigger: 'change' }],
street: [{ required: true, message: '请选择街道', trigger: 'change' }],
});
const locationType = ref('district'); // 默认选择省市区
const districtOptions = ref([]); // 省市区选项
// 加载街道列表
const loadStreets = async (query: string) => {
try {
const response = await axios.get(`/api/streets?query=${query}`);
return response.data.streets.map((street: any) => ({
label: street.name,
value: street.id,
}));
} catch (error) {
console.error('Error loading streets:', error);
return [];
}
};
// 处理地点类型变化
const handleLocationTypeChange = () => {
// 清空之前选择的值
formData.street = [];
};
// 处理省市区选择变化
const handleDistrictChange = () => {
// 根据选择的省市区加载街道数据(这里可以根据实际需求进行调整)
};
// 提交表单
const submitForm = async () => {
try {
await $refs.formData.validate();
if (formData.value.locationType === 'district') {
// 处理省市区数据
} else if (formData.value.locationType === 'street') {
// 处理街道数据
}
// 提交表单逻辑,例如调用后端接口
console.log('Form data:', formData.value);
// 使用 axios 发送表单数据到后端
await axios.post('/api/submit', formData.value);
} catch (error) {
console.error('Submit error:', error);
}
};
2. 实现数据加载和交互逻辑
在上述代码中,使用了Vue 3的Composition API结合TypeScript来管理表单数据、验证规则、组件交互等。
- formData: 表单数据对象,包括姓名、手机号、年龄、学校、性别、省市区、街道等字段。
- formRules: 表单验证规则,确保必填字段不能为空且格式正确。
- locationType: 控制显示省市区选择还是街道选择的组件。
- districtOptions: 省市区选项数据,通过后端接口获取。
- loadStreets: 异步加载街道列表的方法,支持搜索功能。
- handleLocationTypeChange: 处理地点类型变化的方法,清空街道选择数据。
- handleDistrictChange: 处理省市区选择变化的方法,可以根据选择的省市区加载对应的街道数据。
- submitForm: 提交表单的方法,包括表单验证和实际数据提交到后端接口。
3. 数据加载和提交
确保通过axios调用后端接口来获取省市区和街道数据,并在选择省市区时加载相应的街道数据。在提交表单时,将表单数据以JSON格式发送到后端处理。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
