7.2elementplus的表單布局與模式

?基礎表單

<template><el-form ref="ruleFormRef" :model="form" :rules="rules" label-width="100px"><el-form-item label="用戶名" prop="username"><el-input v-model="form.username" placeholder="請輸入用戶名" /></el-form-item><el-form-item label="郵箱" prop="email"><el-input v-model="form.email" placeholder="請輸入郵箱" /></el-form-item><el-form-item label="愛好"><!-- 注意: 愛好沒有 prop, 所以不會參與 el-form 的校驗 --><el-checkbox-group v-model="form.hobby"><el-checkbox label="讀書" /><el-checkbox label="音樂" /><el-checkbox label="電影" /></el-checkbox-group></el-form-item><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button><el-button @click="resetForm(ruleFormRef)">重置</el-button></el-form-item></el-form>
</template><script setup>
import { ref, reactive } from 'vue'
import { ElMessage } from 'element-plus'const ruleFormRef = ref() // 用于獲取 el-form 實例// 表單數據
const form = reactive({username: '',email: '',hobby: [] // 數組
})// 校驗規則
const rules = reactive({username: [{ required: true, message: '請輸入用戶名', trigger: 'blur' },{ min: 3, max: 15, message: '長度在 3 到 15 個字符', trigger: 'blur' }],email: [{ required: true, message: '請輸入郵箱地址', trigger: 'blur' },{ type: 'email', message: '請輸入正確的郵箱地址', trigger: ['blur', 'change'] }]
})// 提交表單
const submitForm = async (formEl) => {if (!formEl) return;try {// validate 返回 Promiseawait formEl.validate()ElMessage.success('提交成功!')console.log('表單數據:', form)} catch (error) {ElMessage.error('校驗失敗!')console.log('校驗失敗:', error)}
}// 重置表單
const resetForm = (formEl) => {if (!formEl) return;formEl.resetFields()
}
</script>

?行內表單 (Inline Form)

<template><el-form :inline="true" :model="searchForm" class="demo-form-inline"><el-form-item label="用戶名"><el-input v-model="searchForm.username" placeholder="用戶名" /></el-form-item><el-form-item label="狀態"><el-select v-model="searchForm.status" placeholder="選擇狀態"><el-option label="全部" value="" /><el-option label="啟用" value="1" /><el-option label="禁用" value="0" /></el-select></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">查詢</el-button></el-form-item></el-form>
</template><script setup>
import { reactive } from 'vue'const searchForm = reactive({username: '',status: ''
})const onSubmit = () => {console.log('查詢條件:', searchForm)
}
</script>

?標簽在上方的表單

<template><el-form :model="form" :rules="rules" label-position="top" label-width="100px"><el-form-item label="項目名稱" prop="projectName"><el-input v-model="form.projectName" /></el-form-item><el-form-item label="項目描述" prop="description"><el-input v-model="form.description" type="textarea" /></el-form-item><el-form-item><el-button type="primary">保存</el-button></el-form-item></el-form>
</template>

動態增減表單項

<template><el-form :model="dynamicForm" ref="dynamicFormRef"><el-form-itemv-for="(domain, index) in dynamicForm.domains":key="domain.key":label="index === 0 ? '域名' : ''" <!-- 只為第一個顯示標簽 -->:prop="'domains.' + index + '.value'":rules="{required: true, message: '域名不能為空', trigger: 'blur'}"><el-input v-model="domain.value" style="width: 300px; margin-right: 10px;" /><el-button @click.prevent="removeDomain(domain)">刪除</el-button></el-form-item><el-form-item><el-button @click="addDomain">新增域名</el-button><el-button type="primary" @click="submitDynamicForm(dynamicFormRef)">提交</el-button></el-form-item></el-form>
</template><script setup>
import { ref, reactive } from 'vue'const dynamicFormRef = ref()
const dynamicForm = reactive({domains: [{ value: '', key: Date.now() } // key 用于 v-for 的唯一性]
})const addDomain = () => {dynamicForm.domains.push({value: '',key: Date.now() + Math.random()})
}const removeDomain = (item) => {const index = dynamicForm.domains.indexOf(item)if (index !== -1) {dynamicForm.domains.splice(index, 1)}
}const submitDynamicForm = async (formEl) => {if (!formEl) return;try {await formEl.validate()ElMessage.success('提交成功!')console.log('動態表單數據:', dynamicForm.domains)} catch (error) {ElMessage.error('校驗失敗!')}
}
</script>

使用建議與最佳實踐

  1. ref?是關鍵: 務必給?el-form?添加?ref,以便調用?validate,?resetFields?等方法。
  2. prop?必須匹配?model:?el-form-item?的?prop?值必須是?model?對象中存在的屬性名,且路徑要正確(如嵌套對象用?user.name)。
  3. 合理使用?trigger:?blur?適合必填和格式校驗,避免用戶輸入時頻繁報錯。change?適合實時性要求高的校驗(如密碼強度)。
  4. resetFields?的陷阱: 它重置的是組件初始化時的?model?值。如果需要重置到一個特定的值(比如空對象?{}),可以在調用?resetFields()?后手動設置?model,或者使用?clearValidate()?和手動清空數據。
  5. 異步校驗: 使用?asyncValidator?處理需要請求后端驗證的場景(如用戶名唯一性檢查)。注意防抖。
  6. status-icon: 開啟后,用戶能更直觀地看到輸入狀態。
  7. scroll-to-error: 對于長表單,開啟此功能能提升用戶體驗。
  8. inline-message: 在空間緊湊的布局中,使用行內錯誤信息可以節省垂直空間。
  9. 自定義錯誤信息: 使用?el-form-item?的?error?屬性或?slots?可以完全控制錯誤信息的顯示。
  10. 組合使用:?el-form?可以與?el-row/el-col?結合,實現更復雜的響應式表單布局。

掌握 el-form 的數據綁定、校驗機制和布局控制,是高效開發 Vue + Element Plus 應用的基礎。它極大地簡化了表單處理的復雜性。

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

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

相關文章

PyTorch實戰(3)——PyTorch vs. TensorFlow詳解

PyTorch實戰&#xff08;3&#xff09;——PyTorch vs. TensorFlow詳解0. 前言1. 張量2. PyTorch 模塊2.1 torch.nn2.2 torch.optim2.3 torch.utils.data3. 使用 PyTorch 訓練神經網絡小結系列鏈接0. 前言 PyTorch 是一個基于 Torch 庫的 Python 機器學習庫&#xff0c;廣泛用…

在win服務器部署vue+springboot + Maven前端后端流程詳解,含ip端口講解

代碼打包與基本配置 首先配置一臺win系統服務器&#xff0c;開放你前端和后端運行的端口&#xff0c;如80和8080 前端打包 前端使用vue3&#xff0c;在打包前修改項目配置文件&#xff0c;我使用的是vite所以是vite.config.js。 import { defineConfig } from vite import …

Springcloud-----Nacos

一、Nacos的安裝 Nacos是阿里推出的一種注冊中心組件&#xff0c;并且已經開源&#xff0c;目前是國內最為流行的注冊中心組件。下面我們來了解一下如何安裝并啟動Nacos。 Nacos是一個獨立的項目&#xff0c;我們可以去GitHub上下載其壓縮包來使用&#xff0c;地址如下&#x…

騰訊云重保流程詳解:從預案到復盤的全周期安全防護

摘要 騰訊云針對國家級重大活動&#xff08;如進博會、冬奧會等&#xff09;提供的網絡安全保障服務&#xff08;重保&#xff09;是一套系統化的主動防御體系。本文從“事前準備”“事中響應”“事后復盤”三個核心階段出發&#xff0c;結合民生銀行等典型用戶的實戰案例&…

單表查詢-group by rollup優化

1、group by rollup基本用法 我們有時候在項目上看到group by rollup用法&#xff0c;其實就是對group by分組進行合計。 下面看一下例子 select count(1),c3 from t1 group by rollup(c3); 計劃從計劃中解讀亦是如此&#xff0c;另外可以從結果上進行分析第21行的count其實就是…

云網絡(參考自騰訊云計算工程師認證)

計算機網絡&#xff1a;OSI七層模型&#xff1a; 應用層&#xff1a;負責處理網絡應用程序之間的通信、 表示層&#xff1a;負責數據的格式化和加密、 會話層&#xff1a;負責建立、管理和終止會話、 傳輸層&#xff1a;負責端到端的可靠傳輸、 網絡層&#xff1a;負責數據的路…

【MLLM】多模態理解Ovis2.5模型和訓練流程(更新中)

note 模型架構&#xff1a;延續 Ovis 系列創新的結構化嵌入對齊設計。 Ovis2.5 由三大組件構成&#xff1a;動態分辨率 ViT 高效提取視覺特征&#xff0c;Ovis 視覺詞表模塊實現視覺與文本嵌入的結構對齊&#xff0c;最后由強大的 Qwen3 作為語言基座&#xff0c;處理多模態嵌…

mysql中的通用語法及分類

MySQL 是一種廣泛使用的關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;其語法設計遵循 SQL 標準&#xff0c;但也有一些特有的擴展。以下從??通用語法規范??和??SQL 語句分類??兩個維度系統梳理 MySQL 的核心語法體系。一、MySQL 通用語法規范通用語法…

Linux-搭建NFS服務器

Linux-搭建NFS服務器前言一、網絡配置二、在nfs服務器上安裝nfs-utils軟件包三、設置共享目錄四、掛載NFS共享目錄前言 NFS&#xff08;Network File System&#xff0c;網絡文件系統&#xff09; 是一種分布式文件系統協議&#xff0c;最初由 Sun Microsystems 于 1984 年開發…

eslasticsearch+ik分詞器+kibana

eslasticsearch 下載地址:https://www.elastic.co/cn/downloads/past-releases ik分詞器 下載地址&#xff1a;https://release.infinilabs.com/analysis-ik/stable/ kibana 下載地址&#xff1a;https://www.elastic.co/cn/downloads/kibana 1、解壓安裝包 將下載的 zi…

SOME/IP-SD IPv4組播的通信參數由誰指定?

<摘要> 在AUTOSAR SOME/IP-SD協議中&#xff0c;組播通信參數&#xff08;地址、協議、端口&#xff09;的協商機制。其核心在于明確規定了組播流的發布者和接收者之間由誰來“指定”通信路徑&#xff0c;從而確保雙方能夠成功會合&#xff0c;實現高效的一對多事件分發。…

新手首次操作SEO核心要點

內容概要 初次接觸SEO的新手朋友們&#xff0c;面對浩瀚的網絡優化知識&#xff0c;難免感到無從下手。這份2025年的零基礎入門指南&#xff0c;正是為你們量身打造。它清晰地規劃了學習路徑&#xff0c;從最基礎的網站搭建注意事項開始&#xff0c;幫助你避開常見陷阱&#xf…

AI、人工智能基礎: 模型剪枝的概念與實踐(PyTorch版)

胡說八道: 各位觀眾老爺&#xff0c;大家好&#xff0c;我是詩人啊_&#xff0c;今天和各位分享模型剪枝的相關知識和操作&#xff0c;一文速通&#xff5e; &#xff08;屏幕前的你&#xff0c;帥氣低調有內涵&#xff0c;美麗大方很優雅… 所以&#xff0c;求個點贊、收藏、關…

Kubernetes 服務發現與健康檢查詳解

Kubernetes 提供了多種機制來管理服務發現、負載均衡和容器健康狀態監控。本文將圍繞以下幾個方面展開&#xff1a;Service 類型&#xff1a;ClusterIP、NodePort、Headless Service、LoadBalancer&#xff08;MetallB&#xff09;Ingress 的實現原理健康檢查探針&#xff1a;L…

如何規劃一年、三年、五年的IP發展路線圖?

?在知識付費領域&#xff0c;規劃 IP 發展路線&#xff0c;需要從短期、中期、長期不同階段&#xff0c;系統地布局內容、運營與商業變現&#xff0c;逐步提升 IP 影響力與商業價值。一年目標&#xff1a;立足定位&#xff0c;夯實基礎精準定位&#xff0c;打磨內容利用創客匠…

C++從入門到實戰(二十)詳細講解C++List的使用及模擬實現

C從入門到實戰&#xff08;二十&#xff09;C List的使用及模擬實現前言一、什么是List1.1 List的核心特性1.2 List與vector的核心差異1.3 List的構造、拷貝構造與析構1.3.1 常用構造函數1.3.2 析構函數1.4 List的迭代器1.4.1 迭代器類型與用法示例1&#xff1a;正向迭代器遍歷…

人工智能學習:機器學習相關面試題(一)

1、 機器學習中特征的理解 def: 特征選擇和降維 特征選擇&#xff1a;原有特征選擇出子集 &#xff0c;不改變原來的特征空間 降維&#xff1a;將原有的特征重組成為包含信息更多的特征&#xff0c; 改變了原有的特征空間降維的主要方法 Principal Component Analysis (主成…

亞馬遜巴西戰略升級:物流網絡重構背后的生態革新與技術賦能之路

在全球電商版圖中&#xff0c;拉美市場正以驚人的增長速度成為新的戰略高地&#xff0c;而巴西作為其中的核心市場&#xff0c;憑借龐大的人口基數、高速發展的數字經濟以及不斷提升的消費能力&#xff0c;吸引著眾多電商巨頭爭相布局。近日&#xff0c;亞馬遜宣布將于2025年底…

PS自由變換

自由變換 自由變換用來對圖層、選區、路徑或像素內容進行靈活的像素調整。可以進行縮放、旋轉、扭曲等多種操作。快捷鍵&#xff1a;CtrlT&#xff0c;操作完成后使用Enter鍵可以確認變換自由變換過程中如果出現失誤&#xff0c;可以按ESC退出&#xff1b;滿意可以按enter確定。…

【K8s】整體認識K8s之存儲--volume

為什么要用volume&#xff1f;首先。容器崩潰或重啟時&#xff0c;所有的數據都會丟失&#xff0c;我們可以把數據保存到容器的外部&#xff0c;比如硬盤nfs&#xff0c;這樣&#xff0c;即使容器沒了&#xff0c;數據還在&#xff1b;第二就是容器之間是隔離的。我們如果想共享…