vue3+ts實現一個表單組件

1. 創建表單組件

首先,創建一個表單組件,包括姓名、手機號、年齡、學校、性別等基本信息的輸入框,并添加省市區和街道地點的選擇功能。

<template><form @submit.prevent="submitForm"><el-form :model="formData" :rules="formRules" ref="formData" label-width="100px"><el-form-item label="姓名" prop="name"><el-input v-model="formData.name"></el-input></el-form-item><el-form-item label="手機號" prop="phone"><el-input v-model="formData.phone"></el-input></el-form-item><el-form-item label="年齡" prop="age"><el-input v-model.number="formData.age"></el-input></el-form-item><el-form-item label="學校" prop="school"><el-input v-model="formData.school"></el-input></el-form-item><el-form-item label="性別" prop="gender"><el-radio-group v-model="formData.gender"><el-radio label="male"></el-radio><el-radio label="female"></el-radio></el-radio-group></el-form-item><el-form-item label="地點" prop="location"><el-radio-group v-model="locationType"><el-radio :label="'district'" @change="handleLocationTypeChange">省市區</el-radio><el-radio :label="'street'" @change="handleLocationTypeChange">街道</el-radio></el-radio-group><div v-if="locationType === 'district'"><!-- 展示省市區組件 --><el-cascaderv-model="formData.district":options="districtOptions"@change="handleDistrictChange"placeholder="請選擇省市區"></el-cascader></div><div v-else-if="locationType === 'street'"><!-- 展示街道多選組件 --><el-selectv-model="formData.street"multiplefilterableremotereserve-keyword:remote-method="loadStreets"placeholder="請輸入街道名稱"></el-select></div></el-form-item><el-form-item><el-button type="primary" native-type="submit">提交</el-button></el-form-item></el-form></form>
</template><script setup lang="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);}
};
</script>

2. 實現數據加載和交互邏輯

在上述代碼中,使用了Vue 3的Composition API結合TypeScript來管理表單數據、驗證規則、組件交互等。

  • formData: 表單數據對象,包括姓名、手機號、年齡、學校、性別、省市區、街道等字段。
  • formRules: 表單驗證規則,確保必填字段不能為空且格式正確。
  • locationType: 控制顯示省市區選擇還是街道選擇的組件。
  • districtOptions: 省市區選項數據,通過后端接口獲取。
  • loadStreets: 異步加載街道列表的方法,支持搜索功能。
  • handleLocationTypeChange: 處理地點類型變化的方法,清空街道選擇數據。
  • handleDistrictChange: 處理省市區選擇變化的方法,可以根據選擇的省市區加載對應的街道數據。
  • submitForm: 提交表單的方法,包括表單驗證和實際數據提交到后端接口。

3. 數據加載和提交

確保通過axios調用后端接口來獲取省市區和街道數據,并在選擇省市區時加載相應的街道數據。在提交表單時,將表單數據以JSON格式發送到后端處理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41640.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遺傳算法求解TSP

一、基本步驟 遺傳算法求解旅行商問題&#xff08;TSP&#xff09;的一般步驟如下&#xff1a; 編碼&#xff1a; 通常采用整數編碼&#xff0c;將城市的訪問順序表示為一個染色體。例如&#xff0c;假設有 5 個城市&#xff0c;編碼為[1, 3, 5, 2, 4]&#xff0c;表示旅行商的…

Leetcode3195. 包含所有 1 的最小矩形面積 I

Every day a Leetcode 題目來源&#xff1a;3195. 包含所有 1 的最小矩形面積 I 解法1&#xff1a;遍歷 設最左、最右、最上、最下的 1 的行號/列號分別為 left、right、top、bottom&#xff0c;則答案為&#xff1a;(right - left 1) * (bottom - top 1)。 代碼&#xf…

新手教學系列——kswapd0 CPU占用100%問題解析與解決

在日常運維中,我們常會遇到一些疑難雜癥,其中kswapd0進程CPU占用100%就是一個常見的問題。通常情況下,這個問題是因為內存耗盡,需要使用到swap空間,可以通過調整swap大小或使用比例來控制磁盤讀寫。然而,今天我要分享的是一個特例,如何在內存并未耗盡且swap使用比例正常…

【STM32項目】基于Stm32搞怪盒子的設計(完整工程資料)

基于stm32搞怪的盒子設計 前言&#xff1a; 最近我看到一個極具創意的搞怪盒子&#xff0c;設計得相當有意思。作為一個熱衷于電子DIY的狂熱愛好者&#xff0c;怎能錯過這樣一個有趣的項目呢&#xff1f;于是&#xff0c;我決定親自動手&#xff0c;設計一個屬于自己的、獨一無…

C語言中關鍵字

C語言中的關鍵字共有32個&#xff0c;這些關鍵字根據其功能可以劃分為以下幾類&#xff1a; 1. 數據類型關鍵字&#xff08;12個&#xff09; char&#xff1a;聲明字符型變量或函數&#xff0c;通常占用1個字節。double&#xff1a;聲明雙精度浮點數變量或函數&#xff0c;占…

C#面:C# 如何使? ActionFilterAttribute?

在C#中&#xff0c;ActionFilterAttribute是一個特性類&#xff0c;用于在控制器的動作方法執行前后添加自定義邏輯。它可以用于實現日志記錄、異常處理、權限驗證等功能。 要使用ActionFilterAttribute&#xff0c;可以按照以下步驟進行操作&#xff1a; 創建一個繼承自Acti…

Apache Seata分布式事務原理解析探秘

本文來自 Apache Seata官方文檔&#xff0c;歡迎訪問官網&#xff0c;查看更多深度文章。 本文來自 Apache Seata官方文檔&#xff0c;歡迎訪問官網&#xff0c;查看更多深度文章。 前言 fescar發布已有時日&#xff0c;分布式事務一直是業界備受關注的領域&#xff0c;fesca…

【carla】ubuntu安裝carla環境

我們可以通過查看 CARLA 的 GitHub release 頁面來找到最新版本的下載鏈接。 下載 CARLA 壓縮包 訪問 CARLA Releases 頁面&#xff1a; CARLA Releases on GitHub 查找最新版本&#xff1a; 找到最新的版本&#xff0c;點擊下載&#xff0c;第一個壓縮包 3. 解壓 CARLA 包&…

深度學習中的正則化技術 - 引言篇

序言 在深度學習中&#xff0c;正則化技術是防止模型過擬合、提升泛化能力的關鍵策略。隨著模型復雜度的增加&#xff0c;過擬合風險也隨之上升。正則化通過引入額外約束或信息&#xff0c;調整模型訓練過程&#xff0c;旨在簡化模型結構&#xff0c;使其學習到數據中的本質特…

VMware Workstation Pro 17.5.2 + license key

Workstation Pro是專為Windows操作系統設計的功能強大的虛擬化軟件平臺,它允許用戶在其計算機上創建和運行虛擬機,這使他們能夠同時與多個操作系統、應用程序和開發環境一起工作。 Workstation Pro的主要特點之一是其易用性,程序提供了直觀的界面,允許用戶輕松創建、配置和…

uabntu安裝opencv

1. 安裝前置依賴 sudo apt update sudo apt upgrade sudo apt install build-essential cmake git pkg-config sudo apt install libjpeg-dev libtiff-dev libpng-dev # Image libraries sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev # Vide…

RocketMQ NettyRemotingServer、NettyRemotingClient 實例化、初始化、啟動源碼解析

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互聯網企業擔任后端開發&#xff0c;CSDN 優質創作者 &#x1f4d6; 推薦專欄&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后續其他專欄會持續優化更新迭代 &#x1f332;文章所在專欄&#…

數學系C++ 類與對象 STL(九)

目錄 目錄 面向對象&#xff1a;py&#xff0c;c艸&#xff0c;Java都是,但c是面向過程 特征&#xff1a; 對象 內斂成員函數【是啥】&#xff1a; 構造函數和析構函數 構造函數 復制構造函數/拷貝構造函數&#xff1a; ?【……】 實參與形參的傳遞方式&#xff1a;值…

Node.js Stream

Node.js Stream Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境&#xff0c;它允許開發者使用 JavaScript 編寫服務器端代碼。Node.js 的一個核心特性是其對流&#xff08;Stream&#xff09;的處理能力。流是一種在 Node.js 中處理讀/寫文件、網絡通信或任何端到端…

【LeetCode】螺旋矩陣

目錄 一、題目二、解法完整代碼 一、題目 給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&…

go-redis 封裝事件-client封裝模型、批量數據處理的導出器設計

一、redis-go的封裝實踐-client模型 // Copyright 2020 Lingfei Kong <colin404foxmail.com>. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file.package storageimport ("context&q…

MySQL性能優化 二、表結構設計優化

1.設計中間表 設計中間表&#xff0c;一般針對于統計分析功能&#xff0c;或者實時性不高的需求。 2.設計冗余字段 為減少關聯查詢&#xff0c;創建合理的冗余字段&#xff08;創建冗余字段還需要注意數據一致性問題&#xff09; 3.折表 對于字段太多的大表&#xff0c;考…

C++ STL容器:序列式容器-鏈list,forward_list

摘要&#xff1a; CC STL&#xff08;Standard Template Library&#xff0c;標準模板庫&#xff09;在C編程中的重要性不容忽視&#xff0c;STL提供了一系列容器、迭代器、算法和函數對象&#xff0c;這些組件極大地提高了C程序的開發效率和代碼質量。 STL 容器 分為 2 大類 …

Halcon 銑刀刀口破損缺陷檢測

一 OTSU OTSU&#xff0c;是一種自適應閾值確定的方法,又叫大津法&#xff0c;簡稱OTSU&#xff0c;是一種基于全局的二值化算法,它是根據圖像的灰度特性,將圖像分為前景和背景兩個部分。當取最佳閾值時&#xff0c;兩部分之間的差別應該是最大的&#xff0c;在OTSU算法中所采…

排序 -- 萬能測試oj

. - 力扣&#xff08;LeetCode&#xff09; 這道題我們可以使用我們學過的那些常見的排序方法來進行解答 //插入排序 void InsertSort(int* nums, int n) {for (int i 0; i < n-1; i){int end i;int tmp nums[end 1];while (end > 0){if (tmp < nums[end]){nums[…