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 相关文章推荐
js动态设置div的值下例子
Oct 29 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
javascript数组详解
Oct 22 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
May 05 Javascript
浅析jQuery Ajax通用js封装
Jun 22 Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
vue-cli3 热更新配置操作
Sep 18 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
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
python生成IP段的方法
2015/07/07 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python Socket编程详细介绍
2017/03/23 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python pygame实现2048游戏
2018/11/20 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
必须要使用游标的SQL语句有那些
2012/05/07 面试题
Oracle性能调优原则
2012/05/03 面试题
大学毕业生自我鉴定
2013/11/05 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
成立公司计划书
2014/05/07 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
Python - 10行代码集2000张美女图
2021/05/23 Python
Java十分钟精通进阶适配器模式
2022/04/06 Java/Android