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 相关文章推荐
ExtJS GTGrid 简单用户管理
Jul 01 Javascript
javascript 新浪背投广告实现代码
Jul 07 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
jquery入门—访问DOM对象方法
Jan 07 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
Jun 16 Javascript
使用时间戳解决ie缓存的问题
Aug 20 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
javascript中HTMLDOM操作详解
Dec 11 Javascript
jQuery基础_入门必看知识点
Jul 04 Javascript
Javascript 6里的4个新语法
Aug 25 Javascript
vue-cli项目中使用Mockjs详解
May 14 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 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
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
python实现简单中文词频统计示例
2017/11/08 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
详解Python如何生成词云的方法
2018/06/01 Python
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
python如何获取apk的packagename和activity
2020/01/10 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
SQL SERVER面试资料
2013/03/30 面试题
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
风险评估实施方案
2014/03/09 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
python面向对象版学生信息管理系统
2021/06/24 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript