vue3+ts实现一个表单组件

2024-07-11 1655阅读

1. 创建表单组件

首先,创建一个表单组件,包括姓名、手机号、年龄、学校、性别等基本信息的输入框,并添加省市区和街道地点的选择功能。

vue3+ts实现一个表单组件
(图片来源网络,侵删)
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
          男
          女
        
      
      
        
          省市区
          街道
        
        
提交 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格式发送到后端处理。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]