element多个表单校验的实现


Posted in Javascript onMay 27, 2021

在项目中,经常会遇到表单检验,单个表单检验可查看element的官网文档,里面有详细的介绍。在这里我分享在实际项目中遇到多个表单同时进行校验以及我的解决方法,欢迎大家留言,一起探讨相关技术,请多多指教。

element多个表单校验的实现

这里主要用到 Promise 来解决。

关于Promise方法举个例子来抽象理解:

周末想吃火锅,打电话告诉小A,过来我这打火锅,菜都齐了,就差点海鲜,你来的时候带点。接着打电话找朋友小B,过来我这打火锅,有海鲜,肉少了点,你来的时候带点。在接着打电话找朋友小C:过来我这打火锅,啥菜都有了,差点酒,你来的时候整几瓶。还差一包火锅底料,拿手机打电话,小D啊,来打活个,咋几个都在,我这电炉不太行了,啥都准备好了,你把电炉带过来,顺便带包底料。

吃火锅这个事就成了,美滋滋。

但这个事吧。总不会一直顺利,总有人来不了对吧,来不了这火锅就吃不成了。

其实多个表单验证,就和这差不多,每个表单都询问一遍,如果大家都通过了,美滋滋,假如其中一个验证失败,那对不起,还得告诉用户,填对了再说。

通过Promise,对每个表单执行询问检测,无论结果如果,先进入Promise.all中,等待所有表单询问完毕,如果大家就可以,就触发then,美滋滋。反之,catch中执行失败响应就ok了。
 

const formName = ['tableForm1', 'tableForm2', 'tableForm3']
      const validates = (item) => {
        return new Promise((resolve, reject) => {
          if (!this.$refs[item]) {
            resolve()
            return false
          }
          this.$refs[item].validate((valid) => {
            if (valid) {
              resolve()
            } else {
              reject(new Error('验证不对'))
            }
          })
        })
      }
      Promise.all(formName.map(item => validates(item))).then(() => {
        console.log('成功')
      }).catch(() => {
        console.log('失败')
      })
    }
  }

最后,在这里贴上完整代码:

<div class="home">
    <el-form :model="tableForm1" ref="tableForm1" :rules="rules1" label-width="100px" >
      <el-form-item label="价格" prop="price">
        <el-input v-model.number="tableForm1.price" autocomplete="off"></el-input>
      </el-form-item>
    </el-form>

    <el-form :model="tableForm2" ref="tableForm2" :rules="rules2" label-width="100px" >
      <el-form-item label="年龄" prop="age">
        <el-input v-model.number="tableForm2.age" autocomplete="off"></el-input>
      </el-form-item>
    </el-form>

    <el-form :model="tableForm3" ref="tableForm3" :rules="rules3" label-width="100px" >
      <el-form-item label="姓名" prop="name">
        <el-input v-model.number="tableForm3.name" autocomplete="off"></el-input>
      </el-form-item>
    </el-form>

    <el-button type="primary" @click="submitForm">提交</el-button>
    <el-button @click="resetForm">重置</el-button>
    
  </div>
</template>

<script>
export default {
  name: 'Home',
  data () {
    return {
      tableForm1: {
        price: ''
      },
      tableForm2: {
        age: ''
      },
      tableForm3: {
        name: ''
      },
      rules1: {
        price: [{ required: true, message: '价格不能为空', trigger: 'blur' }]
      },
      rules2: {
        age: [{ required: true, message: '年龄不能为空', trigger: 'blur' }]
      },
      rules3: {
        name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }]
      }
    }
  },
  methods: {
    resetForm () {
      this.$refs.tableForm1.resetFields()
      this.$refs.tableForm2.resetFields()
      this.$refs.tableForm3.resetFields()
    },
    submitForm () {
      const formName = ['tableForm1', 'tableForm2', 'tableForm3']
      const validates = (item) => {
        return new Promise((resolve, reject) => {
          if (!this.$refs[item]) {
            resolve()
            return false
          }
          this.$refs[item].validate((valid) => {
            if (valid) {
              resolve()
            } else {
              reject(new Error('验证不对'))
            }
          })
        })
      }
      Promise.all(formName.map(item => validates(item))).then(() => {
        console.log('成功')
      }).catch(() => {
        console.log('失败')
      })
    }
  }
}
</script>

到此这篇关于element多个表单校验的实现的文章就介绍到这了,更多相关element 表单校验内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
一个基于jquery的文本框记数器
Sep 19 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
JS获取select-option-text_value的方法
Dec 26 Javascript
jquery手风琴特效插件
Feb 04 Javascript
JavaScript控制table某列不显示的方法
Mar 16 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
Jan 27 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
Jan 17 Javascript
JavaScript框架Angular和React深度对比
Nov 20 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
springboot+VUE实现登录注册
May 27 #Vue.js
vue+springboot实现登录验证码
vue+spring boot实现校验码功能
May 27 #Vue.js
vue-cropper组件实现图片切割上传
May 27 #Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 #Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
用React Native制作一个简单的游戏引擎
May 27 #Javascript
You might like
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python快速查找算法应用实例
2014/09/26 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
浅谈Python的list中的选取范围
2018/11/12 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Python自带的IDE在哪里
2020/07/01 Python
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
泰国的头号网上婴儿用品店:Motherhood.co.th
2019/04/09 全球购物
毕业生求职自荐信怎么写
2014/01/08 职场文书
期末自我鉴定
2014/02/02 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
白鹤梁导游词
2015/02/06 职场文书
入党介绍人意见2015
2015/06/01 职场文书