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 相关文章推荐
showModelessDialog()使用详解
Sep 07 Javascript
JavaScript 撑出页面文字换行
Jun 15 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
CSS和Javascript简单复习资料
Jun 29 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
javascript带回调函数的异步脚本载入方法实例分析
Jul 02 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
Nov 27 Javascript
js构建二叉树进行数值数组的去重与优化详解
Mar 26 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 Javascript
JavaScript 去重和重复次数统计
Mar 31 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
jQuery 选择器详解
2015/01/19 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
浅谈MySQL中的触发器
2015/05/05 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python对数组进行排序,并输出排序后对应的索引值方式
2020/02/28 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
python 实现的车牌识别项目
2021/01/25 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
HTML5 weui使用笔记
2019/11/21 HTML / CSS
浙大毕业生自荐信
2014/01/26 职场文书
房地产开发项目建议书
2014/05/16 职场文书
中层干部考核评语
2015/01/04 职场文书
北京英文导游词
2015/02/12 职场文书
亮剑观后感500字
2015/06/05 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL