element-plus?el-form表單驗證使用方法以及注意事項
element-plus@2.0.6 及之后的版本,表單驗證不再是同步執(zhí)行的了
另外,element-plus@2.1.4 及之后的版本,才可按照官方文檔示例正常使用(使用的是兩者的中間版本的話,最好先自行確認下正確的
const submitForm = async (formEl: FormInstance | undefined) => { if (!formEl) return await formEl.validate((valid, fields) => { if (valid) { console.log('submit!') // 位置1 } else { console.log('error submit!', fields) } }) // 位置2 }
上例中:
如果在“位置1”執(zhí)行表單驗證通過后的業(yè)務代碼,可以去掉 async...await
如果在“位置2”執(zhí)行,則需加上。否則,會直接跳過驗證
這樣,與異步校驗(三、6)的使用辦法就一致了,兩者可以取其一。element-plus@2.1.4及之后的推薦統(tǒng)一使用上例中的寫法
表單定義規(guī)則
//表單驗證規(guī)則 const rules = reactive({ name: [{ validator: checkName, trigger: ['blur', 'change'],required: true}], phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }], password: [{ validator: checkpassword, trigger: ['blur'] }], })
el-form配置
<el-form :model="formData" :rules="rules" ref="baseForm"></el-form>
上一步已經(jīng)為表單綁定了規(guī)則列表formData,接下來,只需要在form-item中使用prop綁定驗證規(guī)則即可
<el-form-item label="電話" style="width: 40%" prop="phone"> <el-input v-model="formData.phone" type="text" autocomplete="off" disabled /> </el-form-item>
對應關系:
- 表單對象 formData: { name: '' }
- 表單元素 prop="name"
- 規(guī)則列表 rules: { name: [{...}] }
另外,驗證嵌套屬性可以通過 . 連接綁定:
- formData: { obj: { name: '' } }
- prop="obj.name"
- baseRules: { 'obj.name': [{...}] }
完整demo
<template> <el-form :model="formData" :rules="rules" ref="ruleFormRef" status-icon label-width="120px" size="large"> <el-form-item label="姓名" style="width: 40%" prop="name"> <el-input v-model="form.name" type="text" autocomplete="off" /> </el-form-item> <el-form-item label="性別" style="width: 40%" prop="sex"> <el-select v-model="form.sex" placeholder="請選擇性別"> <el-option label="男" :value=1 /> <el-option label="女" :value=0 /> </el-select> </el-form-item> <el-form-item label="生日" style="width: 40%" prop="birthday"> <!-- <el-input v-model="form.birthday" type="text" autocomplete="off" /> --> <el-date-picker v-model="form.birthday" type="date" placeholder="請選擇生日!" style="width: 100%" value-format="YYYY-MM-DD" /> </el-form-item> <el-form-item label="電話" style="width: 40%" prop="phone"> <el-input v-model="form.phone" type="text" autocomplete="off" disabled /> </el-form-item> <el-form-item label="密碼" style="width: 40%" prop="password"> <el-input v-model="form.password" type="password" autocomplete="off" show-password /> </el-form-item> </el-form> </template> <script setup> let formData = reactive({ birthday: '', name: '', phone: '', sex: 1, password: '' }) // 驗證函數(shù) const checkPhone = (rule, value, callback) => { console.log(value); if (!Number.isInteger(Number(value))) { return callback(new Error('請輸入數(shù)字!')) } else if (String(value).length != 11) { return callback(new Error('您輸入的手機位數(shù)不是11位!')) } else { callback() } } // 驗證函數(shù) const checkpassword = (rule, value, callback) => { console.log(value); if (String(value).length > 12) { return callback(new Error('您輸入的密碼過長!長度不超過12位')) } else { callback() } } // 驗證函數(shù) const checkName = (rule, value, callback) => { if (value.length > 8) { return callback(new Error('您輸入的姓名過長!')) } else { callback() } } //表單驗證規(guī)則 const rules = reactive({ name: [{ validator: checkName, trigger: ['blur', 'change'] }], phone: [{ type: number, validator: checkPhone, trigger: ['blur', 'change'] }], password: [{ validator: checkpassword, trigger: ['blur'] }], }) </script>
配置項以及其可選的值
(詳細文檔鏈接)
Rules API:
type: 指示要使用的驗證器類型
type: string, number, boolean, method, regexp, integer, float, array, object, enum, date, url, hex, email, any
Required
required:必填/非必填
Messages
message: 錯誤提示
Pattern
pattern: 值需校驗通過的正則表達式
Range
min, max: type為array, string時,指長度。為number時,指大小
Length
len: type為array, string時,指長度。為number時,指值
Enumerable
enum: 例:{ type: 'enum', enum: ['admin', 'user', 'guest'] }
Whitespace
Deep Rules 對象的深層規(guī)則
fields: 對象的屬性名,數(shù)組的下標
defaultField: 應用于對象、數(shù)組內(nèi)的所有成員
Transform
transform: 方法,對值的預處理
validator
validator: 自定義驗證方法
asyncValidator
asyncValidator: 自定義異步驗證方法
trigger: 觸發(fā)驗證的方法,值可用字符串’blur’, ‘change’,也可是數(shù)組[‘blur’, ‘change’]
注意,規(guī)則數(shù)組是按序逐一被執(zhí)行驗證的(trigger='blur’時,更改input框的值不會觸發(fā)驗證)
進階
單項驗證
可在表單的項 ( < el-form-item > ) 中單獨設置驗證規(guī)則
<el-form-item label="郵箱:" prop="email" :rules="[{ type: 'email', message: '郵箱格式錯誤', trigger: 'change' }]" ></el-form-item>
簡寫:
<el-form-item label="姓名:" prop="username" required />
對于字符串的非空校驗,element plus表單驗證提供了一種簡單的方式(能實現(xiàn)校驗,但有很大局限性,而且提示語是英文)
為了代碼的可維護性與美觀,盡量不要將規(guī)則寫在模板中。但某些情況下必須如此,比如,當需要額外傳遞參數(shù)給validator時:
<el-form-item label="樣本類型:" prop="sampType" :rules="[{ validator: (rule, value, cb) => validateSampType(rule, value, cb, yourParams), trigger: 'change' }]" ></el-form-item>
正則校驗
//regex.js // 手機號或座機號 export const reg_tel_phone = /(^((\+86)|(86))?(1[3-9])\d{9}$)|(^(0\d{2,3})-?(\d{7,8})$)/
//doctor.vue import { reg_tel_phone } from '@/assets/regex' rules: { name: [{ required: true, message: '請輸入醫(yī)生名稱', trigger: 'blur' }], title: [{ required: true, message: '請選擇職稱', trigger: 'change' }], tel: [{ pattern: reg_tel_phone, message: '請輸入正確的手機號或座機號', trigger: ['blur', 'change'] }] },
注意:直接在vue模板中進行單項驗證使用正則校驗時,需將RegExp定義成響應式變量。
總結
到此這篇關于element-plus el-form表單驗證使用方法以及注意事項的文章就介紹到這了,更多相關element-plus el-form表單驗證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- vue3 el-form-item如何自定義label標簽內(nèi)容
- Vue3 Element Plus el-form表單組件示例詳解
- VUE3使用Element-Plus時如何修改ElMessage中的文字大小
- 解決Vue3使用Element-Plus導航刷新后active高亮消失的問題
- Vue3使用element-plus實現(xiàn)彈窗效果
- vue3+element-plus?Dialog對話框的使用與setup?寫法的用法
- vue3+vite+TS中使用element-plus按需引入ElLoading、ElMessage樣式失效解決
- VUE3+Element-plus中el-form的使用示例代碼