这篇文章时关于如何使用iview的form表单校验。主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <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>
|
2.添加校验规则
1 2 3 4 5 6 7 8 9 10
| formRules: { name: [ {required: true, message: "必输项不能为空", trigger: 'blur'}, {validator:(rule, value, cb)=>{lenValid(value, 30, cb)}, trigger: 'blur'} ], age:[], asyName: [ {validator:(rule, value, cb)=>{asyValid(value, cb)}, trigger: 'change'} ] }
|
3.校验方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 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 + '' 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 }
|
4.动态添加校验规则
有时候需要动态切换一个输入框,比如:上面的age字段,显示的时候是必输项,隐藏的时候是非必输的,这个时候需要动态的修改校验规则
1 2 3 4 5 6 7 8 9
| this.liveNode = flase if(this.flag){ this.formRules.age.unShift({required: true, message: '必输项'}) }else{ if(this.formRules.age.length > 0){ this.formRules.age.shift() } } this.liveNode = true
|
5.异步校验
有时候输入的内容需要到后台异步校验
1 2 3 4 5 6 7 8 9
| function asyValid(value, cb){ let param = {asyName: value} $http(url,action,param,(res)=>{ cb() },(err)=>{ cb(new Error(err.data.message)) }) }
|
6.组件模板传值校验
使用<component>
实现动态模板时,可能有多层页面嵌套,导致表单校验监听不到,此时可以使用在子组件检验然后将校验好的结果传递给父组件。
1 2
| <component ref="fatherComRef" :is="liveModal"></component>
|
1 2 3 4 5 6
| sonValidate: function(cb){ this.$refs['sonComRef'].validate(valid=>{ cb(valid) }) }
|
1 2 3 4 5 6
| this.$refs['fatherComRef'].sonValidate(valid=>{ if(valid){ } })
|