当前位置:   article > 正文

vue 表单验证由异步变更为同步

vue 异步调接口校验唯一性

写前端项目时vue表单验证突然变成异步了,导致如果获取校验函数的返回值,应该是升级iview组件导致的,这里记录一下改为同步的一种写法

实现功能:表单中进行规则设置,当触发提交或者流程中的下一页时触发这些规则校验

表单

  1. <Form ref="businessInfo" :model="businessInfo" :rules="businessInfoRule" :label-width="120">
  2. <Row>
  3. <Col span="8">
  4. <Col span="22">
  5. <FormItem label="业务信息:" prop="objectInfo">
  6. <!-- {{sendData.busnissMsg}} -->
  7. <Input v-model="businessInfo.objectInfo" placeholder="具体使用集群的业务名称"></Input>
  8. </FormItem>
  9. </Col>
  10. </Col>
  11. <Col span="8">
  12. <Col span="22">
  13. <FormItem label="OP:" prop="op">
  14. <Input v-model="businessInfo.op" placeholder="产品线OP"></Input>
  15. </FormItem>
  16. </Col>
  17. </Col>
  18. <Col span="8">
  19. <Col span="22">
  20. <FormItem label="项目邮件组:" prop="mailGroup">
  21. <Input v-model="businessInfo.mailGroup" placeholder="邮箱地址"></Input>
  22. </FormItem>
  23. </Col>
  24. </Col>
  25. </Row>
  26. </Form>

规则在data中设置

  • 子key的名字和上述表单子项的prop设置的名字要一样
  1. businessInfoRule:{
  2. op:[
  3. {required:true,message: '请填写业务op',trigger: 'change'}
  4. ],
  5. mailGroup:[
  6. {required:true,type:'email',message: '请正确填写邮箱信息',trigger: 'change'},
  7. ],
  8. note:[
  9. {required:true,message: '请填写业务用途',trigger: 'change'},
  10. {max:30,message: '请限制在30个字范围内',trigger: 'change'}
  11. ],
  12. objectInfo:[
  13. {required:true,message: '请填写业务信息',trigger: 'change'},
  14. ]
  15. },

规则校验的函数以及调用函数

  • Promise是内置的函数
  • this.checkForm().then(res=> 这里的res是checkForm函数返回的结果集
    
  • 通过Promis和this.checkForm().then(res=>这种调用方法实现同步调用,即当checkForm执行完毕后才会进入下一逻辑
  1. checkForm(){
  2. return new Promise((resolve, reject) => {
  3. this.$refs['businessInfo'].validate((valid) => {
  4. console.log('inner')
  5. console.log(valid)
  6. if (valid) {
  7. resolve(true)
  8. } else {
  9. this.$Message.error('请检查业务及归属信息');
  10. checkResult = false
  11. resolve(false)
  12. }
  13. })
  14. })
  15. },
  16. changeCrrentPage(){
  17. this.checkForm().then(res=>{
  18. if (res){
  19. console.log(res)
  20. this.defaultPage = page;
  21. this.$refs.flowApply.changePage(page)
  22. }
  23. })
  24. break
  25. }

错误的写法

  • 以前均是采用此中方法进行校验,但是升级了iview组件之后此方法不在生效,在调用checkForm函数时其变为了异步方式,即if(this.checkForm()) 这里的返回时undefined
  1. checkForm(){
  2. return new Promise((resolve, reject) => {
  3. this.$refs['businessInfo'].validate((valid) => {
  4. console.log('inner')
  5. console.log(valid)
  6. if (valid) {
  7. return(true)
  8. } else {
  9. this.$Message.error('请检查业务及归属信息');
  10. return false
  11. }
  12. })
  13. })
  14. },
  15. changeCrrentPage(){
  16. if (this.checkForm()) {
  17. this.defaultPage = page;
  18. this.$refs.flowApply.changePage(page)
  19. }
  20. break
  21. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/227830
推荐阅读
相关标签
  

闽ICP备14008679号