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 相关文章推荐
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
Mar 01 Javascript
JavaScript实现简单图片轮播效果
Aug 21 Javascript
SVG动画vivus.js库使用小结(实例代码)
Sep 14 Javascript
Vue实战之vue登录验证的实现代码
Oct 31 Javascript
Javascript实现购物车功能的详细代码
May 08 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
对layui中的onevent 和event的使用详解
Sep 06 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的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
php 基础函数
2017/02/10 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python 切分数组实例解析
2019/11/07 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
animation和transition的区别
2020/10/12 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
linux面试题参考答案(4)
2014/09/21 面试题
十佳护士获奖感言
2014/02/18 职场文书
整改落实自查报告
2014/11/05 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
公司奖励通知
2015/04/21 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
图解上海144收音机
2021/04/22 无线电
人民币符号
2022/02/17 杂记