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不可用的问题探究
Oct 01 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
Oct 19 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
学习使用bootstrap的modal和carousel
Dec 09 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
纯js模仿windows系统日历
Feb 04 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
详解微信小程序canvas圆角矩形的绘制的方法
Aug 22 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
vue element upload实现图片本地预览
Aug 20 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
webpack4.x打包过程详解
2018/07/18 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
python抽取指定url页面的title方法
2018/05/11 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
如何在Django项目中引入静态文件
2019/07/26 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
物流专员岗位职责
2014/02/17 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
广播体操比赛口号
2014/06/10 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js