VUE3-Elementplus-form表單-筆記

?1. 結構相關

? ? ? el-row表示一行,一行分成24份

? ? ? ?el-col表示列 ?

? ? ? ?(1) :span="12" ?代表在一行中,占12份 (50%)

? ? ? ?(2) :span="6" ? 表示在一行中,占6份 ?(25%)

? ? ? ?(3) :offset="3" 代表在一行中,左側margin份數

? ? ? ?el-form 整個表單組件

? ? ? ?el-form-item 表單的一行 (一個表單域)

? ? ? ?el-input 表單元素(輸入框)

? ? 2. 校驗相關

? ? ? ?(1) el-form => :model="ruleForm" ? ? ?綁定的整個form的數據對象 { xxx, xxx, xxx }

? ? ? ?(2) el-form => :rules="rules" ? ? ? ? 綁定的整個rules規則對象 ?{ xxx, xxx, xxx }

? ? ? ?(3) 表單元素 => v-model="ruleForm.xxx" 給表單元素,綁定form的子屬性

? ? ? ?(4) el-form-item => prop配置生效的是哪個校驗規則 (和rules中的字段要對應)

/ 整個表單的校驗規則

// 1. 非空校驗 required: true ? ? ?message消息提示, ?trigger觸發校驗的時機 blur change

// 2. 長度校驗 min:xx, max: xx

// 3. 正則校驗 pattern: 正則規則 ? ?\S 非空字符

// 4. 自定義校驗 => 自己寫邏輯校驗 (校驗函數)

// ? ?validator: (rule, value, callback)

// ? ?(1) rule ?當前校驗規則相關的信息

// ? ?(2) value 所校驗的表單元素目前的表單值

// ? ?(3) callback 無論成功還是失敗,都需要 callback 回調

// ? ? ? ?- callback() 校驗成功

// ? ? ? ?- callback(new Error(錯誤信息)) 校驗失敗

相應代碼:

vue3中,以按需引入了elementplus和icons?


<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import {ref} from 'vue'const isRegister = ref(false)
//用于提交整個form表單數據
const formModel=ref({username:'',password:'',repassword:''
})
//用于校驗表單數據
const rules={username: [{ required: true, message: '請輸入用戶名', trigger: 'blur' },{ min: 5, max: 10, message: '用戶名必須是5-10位的字符', trigger: 'blur' }],password: [{ required: true, message: '請輸入密碼', trigger: 'blur' },{ pattern: /^\S{6,15}$/, message: '密碼必須是6-15位', trigger: 'blur' }],//自定義校驗repassword:[{ required: true, message: '請輸入密碼', trigger: 'blur' },{ pattern: /^\S{6,15}$/, message: '密碼必須是6-15位', trigger: 'blur' },{validate:(rule,value,callback)=>{if(value!==formModel.value.password){callback(new Error('兩次輸入的密碼不一致'))}else{callback()//不成功也要callback }}}]
}
</script>                                           
<template><!-- el-row表示一行,一行表示24分 --><!-- :span表示一行中占幾份 :offset在一行中左側margin份數 --><el-row class="login-page"><el-col :span="12" class="bg"></el-col><el-col :span="6" :offset="3" class="form"><!-- 注冊相關表單 --><el-form:model="formModel":rules="rules"ref="form"size="large"autocomplete="off"v-if="isRegister"><el-form-item><h1>注冊</h1></el-form-item><el-form-item prop="username"><el-inputv-model="formModel.username":prefix-icon="User"placeholder="請輸入用戶名"></el-input></el-form-item><el-form-item prop="password"><el-inputv-model="formModel.password":prefix-icon="Lock"type="password"placeholder="請輸入密碼"></el-input></el-form-item><el-form-item prop="repassword"><el-inputv-model="formModel.repassword":prefix-icon="Lock"type="password"placeholder="請輸入再次密碼"></el-input></el-form-item><el-form-item><el-buttonclass="button"type="primary"auto-insert-space>注冊</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = false">← 返回</el-link></el-form-item></el-form><!-- 登錄相關表單 --><el-form:model="formModel":rules="rules"size="large"autocomplete="off"v-else><el-form-item><h1>登錄</h1></el-form-item><el-form-item prop="username"><el-inputv-model="formModel.username":prefix-icon="User"placeholder="請輸入用戶名"></el-input></el-form-item><el-form-item prop="password"><el-inputv-model="formModel.password":prefix-icon="Lock"type="password"placeholder="請輸入密碼"></el-input></el-form-item><el-form-item class="flex"><div class="flex"><el-checkbox>記住我</el-checkbox><el-link type="primary" :underline="false">忘記密碼?</el-link></div></el-form-item><el-form-item><el-buttonclass="button"type="primary"auto-insert-space>登錄</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = true">注冊 →</el-link></el-form-item></el-form></el-col></el-row>
</template><style lang="scss" scoped>
.login-page {height: 100vh;background-color: #fff;.bg {background: url('../../assets/logo2.png') no-repeat 60% center / 240px auto,url('../../assets/login_bg.jpg') no-repeat center / cover;border-radius: 0 20px 20px 0;}.form {display: flex;flex-direction: column;justify-content: center;user-select: none;.title {margin: 0 auto;}.button {width: 100%;}.flex {width: 100%;display: flex;justify-content: space-between;}}
}
</style>

代碼中理解點:

實例代碼:

const rules = {username: [{ required: true, message: '請輸入用戶名', trigger: 'blur' }, // 必填項,觸發條件為失焦{ min: 5, max: 10, message: '用戶名必須是5-10位的字符', trigger: 'blur' } // 字符長度限制,觸發條件為失焦],password: [{ required: true, message: '請輸入密碼', trigger: 'blur' }, // 必填項,觸發條件為失焦{ pattern: /^\S{6,15}$/, message: '密碼必須是6-15位', trigger: 'blur' }, // 正則表達式,非空白字符,長度6-15,觸發條件為失焦{ validator: validatePassword, trigger: 'blur' } // 自定義校驗函數,觸發條件為失焦],email: [{ required: true, message: '請輸入郵箱地址', trigger: 'blur' }, // 必填項,觸發條件為失焦{ type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur' } // 類型為郵箱,觸發條件為失焦],age: [{ type: 'number', min: 18, max: 60, message: '年齡必須在18到60歲之間', trigger: 'blur' } // 類型為數字,數值范圍18-60,觸發條件為失焦],website: [{ type: 'url', message: '請輸入正確的網址', trigger: 'blur' } // 類型為網址,觸發條件為失焦],agree: [{ type: 'boolean', required: true, message: '請同意協議', trigger: 'change' } // 類型為布爾值,必填項,觸發條件為改變],colors: [{ type: 'array', required: true, message: '請選擇至少一個顏色', trigger: 'change' } // 類型為數組,必填項,觸發條件為改變],birthdate: [{ type: 'date', required: true, message: '請選擇生日', trigger: 'change' } // 類型為日期,必填項,觸發條件為改變],phone: [{ pattern: /^1[34578]\d{9}$/, message: '請輸入正確的手機號碼', trigger: 'blur' } // 正則表達式,校驗手機號碼,觸發條件為失焦],hexColor: [{ type: 'hex', message: '請輸入正確的16進制顏色值', trigger: 'blur' } // 類型為16進制顏色值,觸發條件為失焦],custom: [{ validator: customValidator, trigger: 'change' } // 自定義校驗函數,觸發條件為改變]
};// 自定義校驗函數
const validatePassword = (rule, value, callback) => {if (value.length < 8) {callback(new Error('密碼至少8位'));} else {callback();}
};const customValidator = (rule, value, callback) => {if (value !== 'customValue') {callback(new Error('自定義校驗不通過'));} else {callback();}
};

解釋

  • required: 必填項。
     javascript 

    復制代碼

    { required: true, message: '請輸入用戶名', trigger: 'blur' }

  • minmax: 限制長度或數值范圍。
     javascript 

    復制代碼

    { min: 5, max: 10, message: '用戶名必須是5-10位的字符', trigger: 'blur' }

  • pattern: 正則表達式校驗。
     javascript 

    復制代碼

    { pattern: /^\S{6,15}$/, message: '密碼必須是6-15位', trigger: 'blur' }

  • type: 校驗字段的類型。
     javascript 

    復制代碼

    { type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur' }

    其他類型包括:string, number, boolean, method, regexp, integer, float, array, object, enum, date, url, hex
  • validator: 自定義校驗函數。
     javascript 

    復制代碼

    { validator: validatePassword, trigger: 'blur' }

  • len: 校驗長度(適用于字符串和數組)。
     javascript 

    復制代碼

    { len: 6, message: '長度必須為6位', trigger: 'blur' }

  • enum: 枚舉類型校驗。
     javascript 

    復制代碼

    { type: 'enum', enum: ['option1', 'option2'], message: '請選擇一個有效的選項', trigger: 'change' }

  • whitespace: 校驗字段是否包含空白字符。
     javascript 

    復制代碼

    { whitespace: true, message: '該字段不能包含空格', trigger: 'blur' }

  • trigger: 定義校驗規則觸發的條件。
     javascript 

    復制代碼

    trigger: 'blur' // 或 'change'

  • transform: 在校驗前對字段的值進行轉換。
     javascript 

    復制代碼

    { type: 'number', transform(value) { return Number(value); }, message: '請輸入有效的數字', trigger: 'blur' }
    ?

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

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

相關文章

后勞動經濟學(PLE):AI時代的工作未來

引言 隨著人工智能&#xff08;AI&#xff09;和自動化技術的飛速發展&#xff0c;我們迎來了一個新的經濟范式——后勞動經濟學&#xff08;PLE&#xff09;。這一概念主要討論在AI和自動化技術超越人類能力的關鍵領域后&#xff0c;機器將不可避免地在許多經濟活動中取代人類…

如何玩單機版:QQ音速

前言 我是研究單機的老羅&#xff0c;今天教大家帶來一款懷舊游戲QQ音速 的教程。根據我的文章&#xff0c;一步一步就可以玩了。 如今市面上的資源參差不齊&#xff0c;大部分的都不能運行&#xff0c;本人親自測試&#xff0c;運行視頻如下&#xff1a; QQ音速 搭建教程 此…

python之GIL鎖詳解

目錄 1.GIL是什么以及影響 2.為什么會有GIL鎖&#xff1f; 1.GIL是什么以及影響 在Python中&#xff0c;多線程的并發性受到全局解釋器鎖&#xff08;GIL&#xff0c;Global Interpreter Lock&#xff09;的影響。GIL是CPython&#xff08;Python的官方實現&#xff09;中的…

vscode下無法識別node、npm的問題

node : 無法將“node”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱 因為node是在cmd安裝的&#xff0c;是全局安裝的&#xff0c;并不是在這個項目里安裝的。 解決方案&#xff1a; 1.在vscode的控制臺&#xff0c;針對一個項目安裝特定版本的node&#xff1b; 2.已經…

C++(Python)肥皂泡沫普拉托邊界膜曲面模型算法

&#x1f3af;要點 &#x1f3af;肥皂泡二維流體模擬 | &#x1f3af;泡沫普拉托邊界膜曲面模型算法演化厚度變化 | &#x1f3af;螺旋曲面三周期最小結構生成 &#x1f4dc;皂膜用例&#xff1a;Python計算物理粒子及拉格朗日和哈密頓動力學 | Python和MATLAB粘性力接觸力動…

SAP系統中的應收賬款(客戶主數據,日常交易,催收,爭議管理)

1. 客戶主數據 Customer Accounts (客戶賬戶&#xff09;:客戶賬戶由兩部分General Data&#xff08;通用數據&#xff09;和Company Code Data&#xff08;公司代碼段數據&#xff09;組成。通用數據是在client級別獨立于公司代碼的數據&#xff0c;例如客戶的地址&#xff0…

鴻蒙開發設備管理:【@ohos.multimodalInput.inputEventClient (注入按鍵)】

注入按鍵 InputEventClient模塊提供了注入按鍵能力。 說明&#xff1a; 本模塊首批接口從API version 8開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口的起始版本。本模塊接口均為系統接口&#xff0c;三方應用不支持調用。 導入模塊 import inputEventCli…

愛情再啟:莊國棟笑談“玫瑰人生”愛情覺悟

莊國棟&#xff0c;這位電視劇《玫瑰的故事》中的男主角&#xff0c; 最近在一次采訪中坦言&#xff1a;“如果給我一次重來的機會&#xff0c; 我絕對會毫不猶豫地選擇愛情&#xff01;” 聽到這話&#xff0c; 我不禁想&#xff0c;莊先生&#xff0c;您是不是被劇里的玫瑰…

Solidworke學習(裝配體3)

目錄 本節學習內容&#xff1a; 一、高級配合 &#xff08;1&#xff09;對稱配合 &#xff08;2&#xff09;寬度配合 &#xff08;3&#xff09;距離配合 二、機械配合 &#xff08;1&#xff09;凸輪配合 &#xff08;2&#xff09;槽口配合 三、快捷菜單 本節學習…

python工作目錄與文件目錄

工作目錄 文件目錄&#xff1a;文件所在的目錄 工作目錄&#xff1a;執行python命令所在的目錄 D:. | main.py | ---data | data.txt | ---model | | model.py | | train.py | | __init__.py | | | ---nlp | | | bert.py | …

計算機網絡期末復習(大題+小題)

計算機網絡期末復習 一、計算機網絡概述 Point 1 計算機網絡就是以傳輸信息為基本目的&#xff0c;用通信線路和通信設備將多個計算機連接起來的計算機系統的集合。由自治的計算機互聯起來的結合體。 Point 2 按網絡的覆蓋范圍進行分類 &#xff08;1&#xff09;局域網*…

解鎖Transformer的魯棒性:深入分析與實踐指南

&#x1f6e1;? 解鎖Transformer的魯棒性&#xff1a;深入分析與實踐指南 Transformer模型自從由Vaswani等人在2017年提出以來&#xff0c;已經成為自然語言處理&#xff08;NLP&#xff09;領域的明星模型。然而&#xff0c;模型的魯棒性——即模型在面對異常、惡意或不尋常…

人機交互新維度|碩博電子發布雙編碼器操作面板、無線操作面板等新品

6月15日&#xff0c;碩博電子召開了一場新品發布會&#xff0c;向業界展示了多項前沿技術成果&#xff0c;其中備受矚目的當屬SPM-KEYP-D08雙編碼器操作面板、SPM-KEYP-D16W無線操作面板、SPR-HT-XK12A無線手持發射端以及SPQ-WT-B01灑水車專用控制面板。這些創新產品的亮相&…

文心一言 VS 訊飛星火 VS chatgpt (292)-- 算法導論21.3 5題

五、證明&#xff1a;任何具有 m 個 MAKE-SET、UNION 和 FIND-SET 操作的序列&#xff0c;這里所有的 LINK 操作都出現在 FIND-SET 操作之前&#xff0c;如果同時使用路徑壓縮和按秩合并啟發式策略&#xff0c;則這些操作只需 O(m) 的時間。在同樣情況下&#xff0c;如果只使用…

Class Constructors and Destructors (類的構造函數和析構函數)

Class Constructors and Destructors [類的構造函數和析構函數] 1. Declaring and Defining Constructors (聲明和定義構造函數)2. Using Constructors (使用構造函數)3. Default Constructors (默認構造函數)4. Destructors (析構函數)5. Improving the Stock Class (改進 Sto…

MT1597 平行線

題目 用下面的數據類型表示線&#xff1a; struct POINT { //點 int x, y; //坐標值x和y } ; struct LINE { //線 POINT s, e; //線的兩端 } ; 輸入2個線段的端點的坐標值x和y&#xff0c;判斷兩條線段所在直線是否為平行線。如果兩線段共線&#xff0c;判為不平行。 輸入…

強強聯合:Apache Kylin與Impala的集成之道

&#x1f517; 強強聯合&#xff1a;Apache Kylin與Impala的集成之道 在大數據時代&#xff0c;Apache Kylin和Impala都是分析型數據庫的佼佼者&#xff0c;分別以預計算的OLAP引擎和高性能的SQL on Hadoop解決方案而聞名。將兩者集成&#xff0c;可以充分利用Kylin的預計算能…

C程序設計譚浩強第五版

第三章 程序習題 1、第2題2、第2題3、第3題4、第4題 1、第2題 假如我國國民生產總值的年增長率為7%&#xff0c; 計算10年后我國國民生產總值與現在相比增長多少百分比。計算公式為 p ( 1 r ) n p (1r)^n p(1r)n ,其中r為年增長率&#xff0c;n為年數&#xff0c;p為與現在…

thinkphp通過with查詢,并通過關聯表進行篩選

直接添加一個where條件,然后條件里面用表名.字段即可,非常方便 需要注意的一點是在fastadmin里面,$this->auth->getGroupIds()這樣獲取是會獲取到緩存里面的值,必須重新登錄之后才可以得到最新的用戶組,這個問題導致困擾了我一晚上 $usage $this->model->with([us…

Oracle數據庫教程

Oracle數據庫教程 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討Oracle數據庫的基礎知識、特性以及在Java中的應用。 什么是Oracle數據庫&…