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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(3)
Dec 23 Javascript
web 页面分页打印的实现
Jun 22 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
vue.js实现的经典计算器/科学计算器功能示例
Jul 11 Javascript
在vue里使用codemirror遇到的问题
Nov 01 Javascript
微信小程序顶部导航栏滑动tab效果
Jan 28 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
Aug 12 Javascript
JS创建自定义对象的六种方法总结
Dec 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
PHP7新增运算符用法实例分析
2016/09/26 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
2015/02/26 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
python列表与元组详解实例
2013/11/01 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
python删除特定文件的方法
2015/07/30 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
python 实现敏感词过滤的方法
2019/01/21 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python如何输出整数
2020/06/07 Python
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
认识深刻的检讨书
2014/02/16 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
党员承诺书范文2015
2015/04/27 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
培训计划通知
2015/07/15 职场文书
五星级酒店宣传口号
2015/12/25 职场文书
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
使用Python通过企业微信应用给企业成员发消息
2022/04/18 Python