這篇文章時關於如何使用iview的form表單校驗。主要學習如何使用form校驗(以校驗文字長度爲例),以及如何動態添加校驗規則和異步校驗。
javascript
<!--注意: ref/rules/model/prop等屬性是必須的--> <Form res="foemRef" :rules="formRules" :model="formData" v-if="liveNode"> <Row> <!--正常校驗--> <Col> <FormItem prop="name"> <Input v-model="formData.name"></Input> </FormItem> </Col> <!--動態校驗--> <Col v-if="flag"> <FormItem prop="age"> <Input v-model="formData.age"></Input> </FormItem> </Col> <!--異步校驗--> <Col> <FormItem prop="asyName"> <Input v-model="formData.asyName"></Input> </FormItem> </Col> </Row> </Form>
formRules: { name: [ {required: true, message: "必輸項不能爲空", trigger: 'blur'}, {validator:(rule, value, cb)=>{lenValid(value, 30, cb)}, trigger: 'blur'} ], age:[], // 注意由於age是根據條件判斷是否必輸,先留個坑 asyName: [ // 異步校驗,使用change觸發,即便不改變輸入數據也會在提交數據的時候自動校驗一次 {validator:(rule, value, cb)=>{asyValid(value, cb)}, trigger: 'change'} ] }
// 校驗輸入的字符長度 function lenValid(str, num, cb){ if(str){ let len = getLen(str) if(len > num){ return cb(new Error('Too Long...')) } } cb() } // 獲取字符長度 function getLen(str){ let len = 0 if(str){ str = str + '' // to string for(let i=0; i<str.length; i++){ let c = str.charCodeAt(i) if((c >= 0x0001 && c <= 0x007e) || (0xff60 < = c && c <= 0xff9f)){ len++ // 單字節 }else{ len += 3 // 漢字 } } } return len }
有時候須要動態切換一個輸入框,好比:上面的age字段,顯示的時候是必輸項,隱藏的時候是非必輸的,這個時候須要動態的修改校驗規則html
this.liveNode = flase // 先抹去Form,等校驗規則修改後在從新渲染 if(this.flag){ this.formRules.age.unShift({required: true, message: '必輸項'}) }else{ if(this.formRules.age.length > 0){ this.formRules.age.shift() } } this.liveNode = true // 從新渲染Form
有時候輸入的內容須要到後臺異步校驗java
// 異步校驗 - 成敗都要有回調函數,校驗失敗拋出異常 function asyValid(value, cb){ let param = {asyName: value} // 將須要校驗的值做爲參數 $http(url,action,param,(res)=>{ cb() },(err)=>{ cb(new Error(err.data.message)) }) }