写前端项目时vue表单验证突然变成异步了,导致如果获取校验函数的返回值,应该是升级iview组件导致的,这里记录一下改为同步的一种写法
实现功能:表单中进行规则设置,当触发提交或者流程中的下一页时触发这些规则校验
表单
<Form ref="businessInfo" :model="businessInfo" :rules="businessInfoRule" :label-width="120">
<Row>
<Col span="8">
<Col span="22">
<FormItem label="业务信息:" prop="objectInfo">
<!-- {{sendData.busnissMsg}} -->
<Input v-model="businessInfo.objectInfo" placeholder="具体使用集群的业务名称"></Input>
</FormItem>
</Col>
</Col>
<Col span="8">
<Col span="22">
<FormItem label="OP:" prop="op">
<Input v-model="businessInfo.op" placeholder="产品线OP"></Input>
</FormItem>
</Col>
</Col>
<Col span="8">
<Col span="22">
<FormItem label="项目邮件组:" prop="mailGroup">
<Input v-model="businessInfo.mailGroup" placeholder="邮箱地址"></Input>
</FormItem>
</Col>
</Col>
</Row>
</Form>
规则在data中设置
- 子key的名字和上述表单子项的prop设置的名字要一样
businessInfoRule:{
op:[
{required:true,message: '请填写业务op',trigger: 'change'}
],
mailGroup:[
{required:true,type:'email',message: '请正确填写邮箱信息',trigger: 'change'},
],
note:[
{required:true,message: '请填写业务用途',trigger: 'change'},
{max:30,message: '请限制在30个字范围内',trigger: 'change'}
],
objectInfo:[
{required:true,message: '请填写业务信息',trigger: 'change'},
]
},
规则校验的函数以及调用函数
- Promise是内置的函数
-
this.checkForm().then(res=> 这里的res是checkForm函数返回的结果集
- 通过Promis和this.checkForm().then(res=>这种调用方法实现同步调用,即当checkForm执行完毕后才会进入下一逻辑
checkForm(){
return new Promise((resolve, reject) => {
this.$refs['businessInfo'].validate((valid) => {
console.log('inner')
console.log(valid)
if (valid) {
resolve(true)
} else {
this.$Message.error('请检查业务及归属信息');
checkResult = false
resolve(false)
}
})
})
},
changeCrrentPage(){
this.checkForm().then(res=>{
if (res){
console.log(res)
this.defaultPage = page;
this.$refs.flowApply.changePage(page)
}
})
break
}
错误的写法
- 以前均是采用此中方法进行校验,但是升级了iview组件之后此方法不在生效,在调用checkForm函数时其变为了异步方式,即if(this.checkForm()) 这里的返回时undefined
checkForm(){
return new Promise((resolve, reject) => {
this.$refs['businessInfo'].validate((valid) => {
console.log('inner')
console.log(valid)
if (valid) {
return(true)
} else {
this.$Message.error('请检查业务及归属信息');
return false
}
})
})
},
changeCrrentPage(){
if (this.checkForm()) {
this.defaultPage = page;
this.$refs.flowApply.changePage(page)
}
break
}
所有评论(0)