element?ui中el-form-item的屬性rules的用法示例小結
el-form-item的屬性rules的用法
在學習element ui 的Form表單組件時,學到el-form-item也有rules屬性,但是對應這個屬性如何使用,卻一直用不對,百度查資料也沒查到,
通過自己多方面測試,終于了解到了el-form-item也有rules屬性的用法,現(xiàn)在總結分享給大家!
栗子



表單域的驗證規(guī)則:
1.只有一條時,el-from-item 的屬性rules綁定的變量的值為一個對象,對象中規(guī)定驗證規(guī)則
2.有多條時,el-from-item 的屬性rules綁定的變量的值為一個對象數(shù)組,數(shù)組中的每一個對象元素都對應一條驗證規(guī)則
總結
在使用Element UI的el-form組件進行表單驗證時,如果同時在el-form上綁定了rules,并且在單獨的el-form-item上也綁定了rules,那么Element UI會將兩者的規(guī)則合并使用。具體來說,對于同一個字段,如果el-form和el-form-item都有對應的驗證規(guī)則,那么el-form-item上的規(guī)則會覆蓋el-form上的規(guī)則。
這里是如何工作的:
el-form的rules:這是表單級別的驗證規(guī)則,適用于表單內所有字段。如果表單中的某個字段沒有在el-form的rules中明確指定規(guī)則,那么它將不會進行驗證。
el-form-item的rules:這是字段級別的驗證規(guī)則,只適用于綁定到該el-form-item的特定字段。如果字段在el-form的rules中也有規(guī)則,el-form-item中的規(guī)則將會覆蓋表單級別的規(guī)則。
例如,如果有一個表單字段username,你在el-form上定義了一個規(guī)則,要求用戶名至少為5個字符,然后在對應的el-form-item上定義了一個規(guī)則,要求用戶名必須以"admin"開頭,那么最終username字段的驗證規(guī)則將是必須以"admin"開頭。
// el-form的rules
{
rules: {
username: [
{ required: true, message: '用戶名是必填項', trigger: 'blur' },
{ min: 5, message: '用戶名至少為5個字符', trigger: 'blur' }
]
}
}
// el-form-item的rules
<el-form-item prop="username">
<el-input v-model="form.username"></el-input>
<template slot="rules">
[
{ validator: customValidator, trigger: 'blur' }
]
</template>
</el-form-item>在這個例子中,customValidator是一個自定義的驗證函數(shù),它將檢查用戶名是否以"admin"開頭。這個規(guī)則將覆蓋el-form中對username字段的最小字符長度要求。
需要注意的是,合并規(guī)則時,el-form-item上的規(guī)則會優(yōu)先應用,但是el-form上的規(guī)則仍然可以為其他沒有在el-form-item上定義規(guī)則的字段提供驗證。
實踐應用
一、 定義靜態(tài)的校驗規(guī)則
如template
<el-form
ref="condFormRef"
id="condForm"
:model="cond"
label-width="100px"
size="mini"
:rules="condFormRules"
>
<!-- rules 內嵌在el-form-item -->
<el-form-item label="名稱:" prop="name" :rules="{required: true, message: '請輸入名稱', trigger:'blur'}">
<el-input
v-model="cond.name">
</el-input>
</el-form-item>
<el-form-item label="預算:" prop="budget">
<el-input
style="width:60%"
v-model="cond.budget"
maxlength="15"
clearable>
</el-input>
<small> 元</small>
</el-form-item>
</el-form>在form 上定義上綁定 rules 屬性, 給需要校驗的item 增加prop 屬性, prop 值需要個rules中的keys 保持一致
condFormRules:{
budget:[//帶prop的
{required: true, message: '', trigger: ['blur','change']},
{validator: validateBudget, trigger: 'blur'},
],
} 說明:
(1) required: 是否必填, true則顯示紅星星, 當設置了必填時, 必須有message, 哪怕為空,否則不填時給默認提示"budget is required"
注意: 如{message: 'aaaaaaaa', trigger: ["blur","change"]}, 沒有required,則會校驗,但上次校驗失敗的信息不會自動消失, 即要有message時, 必須有required
(2) trigger: 可選["blur","change"]觸發(fā)執(zhí)行校驗的事件 blur:失去焦點時, change:數(shù)據(jù)改變時
this.$refs.condFormRef.validate() 時,trigger都會執(zhí)行
(3) validator:自定義校驗屬性,可以定義自己的校驗規(guī)則,如validateBudget自定義的規(guī)則函數(shù), 校驗邏輯復雜時可以自定義函數(shù)實現(xiàn)。
如下校驗邏輯復雜的:要求數(shù)字且正整數(shù)或最多帶兩位的小數(shù)
var validateBudget=(rule, value, callback) => {
if(!value || !Number(value)){ //不輸入或輸0.0或0.00時,都進入
callback(new Error('請輸入預算'));
}
else if(!(/(^[1-9]\d*(\.\d{1,2})?)$/.test(value) || /(^[0](\.\d{1,2}){1})$/.test(value))){
callback(new Error('請輸入正整數(shù)或最多帶兩位的小數(shù)'));
}
else{
callback();
}
};校驗輸入數(shù)字簡單時,可以直接寫在模板中, 如限制輸入數(shù)字
<el-input style="width:60%" v-model="cond.budget" maxlength="15" @input="cond.budget = cond.budget.replace(/[^\d]/g, '')" //非數(shù)字的全局替換成空 clearable> </el-input>
二、定義動態(tài)的校驗規(guī)則
當我們的表單項是動態(tài)生成的, 又需要對其進行輸入值的校驗, 怎么做呢?????
比如添加一個用戶信息,讓其輸入并校驗
<el-col :span="6">
<el-button @click="addInfo">添加學生信息</el-button>
<el-form ref="testForm" :model="testModel" label-width="100px">
<div
style="border: 1px solid #000000"
v-for="(info, index) of testModel.studentsInfos"
:key="'info_'+index"
>
<el-form-item
label="名字"
:prop="'studentsInfos.' + index + '.name'"
:rules="{required: true, message: '請輸入名稱', trigger:'blur'}"
>
<el-input v-model="info.name"></el-input>
</el-form-item>
<el-form-item
label="年齡"
:prop="'studentsInfos.' + index + '.age'"
:rules="validateAge"
>
<el-input v-model="info.age"></el-input>
</el-form-item>
<el-form-item
label="性別"
:prop="'studentsInfos.' + index + '.sex'"
:rules="{required: true, message: '請選擇性別', trigger:'change'}"
>
<el-select v-model="info.sex">
<el-option label="男" value="man"></el-option>
<el-option label="女" value="women"></el-option>
</el-select>
</el-form-item>
</div>
<el-form-item label="">
<el-button @click="testSave">保存</el-button>
</el-form-item>
</el-form>
</el-col>效果圖如下

data() {
return {
testModel:{studentsInfos: []
},
validateAge: [
{required: true, message: "請輸入您的年齡", trigger: ['blur', 'change']},
{validator: (rule, value, callback)=>{
if(value&& !(/^\d+$/g).test(value)){
callback(new Error("請輸入數(shù)字"))
}
callback()
}
}
]
}methods: {
addInfo(){
this.testModel.studentsInfos.push({name: "", age: "", sex: ""})
},
testSave(){
this.$refs['testForm'].validate((valid)=>{
if(valid){
console.log("校驗通過, 可以保存了")
}
else{
console.log("校驗失敗")
}
})
},
}到此這篇關于element ui中el-form-item的屬性rules的用法的文章就介紹到這了,更多相關element ui中el-form-item的屬性rules的用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue實現(xiàn)網(wǎng)絡圖片瀑布流 + 下拉刷新 + 上拉加載更多(步驟詳解)
這篇文章主要介紹了vue實現(xiàn)網(wǎng)絡圖片瀑布流 + 下拉刷新 + 上拉加載更多,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Vue TypeScript使用eval函數(shù)遇到的問題
近幾年前端對 TypeScript的呼聲越來越高,Typescript也成為了前端必備的技能。TypeScript是JS類型的超集,并支持了泛型、類型、命名空間、枚舉等特性,彌補了 JS 在大型應用開發(fā)中的不足2023-01-01
vue使用v-model進行跨組件綁定的基本實現(xiàn)方法
這篇文章主要給大家介紹了關于vue使用v-model進行跨組件綁定的基本實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04

