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 2.0 GridPanel基本表格简明教程
May 25 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
Jun 10 Javascript
jquery动感漂浮导航菜单代码分享
Apr 15 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
javascript加载xml 并解析各节点的值(实现方法)
Oct 12 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
Vue实现选择城市功能
May 27 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
Oct 26 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
javascript运动详解
2015/07/06 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
JS JQuery获取data-*属性值方法解析
2020/09/01 jQuery
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python重要函数eval多种用法解析
2020/01/14 Python
python 弧度与角度互转实例
2020/04/15 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
新员工培训个人的自我评价
2013/10/09 职场文书
三年级音乐教学反思
2014/01/28 职场文书
投标承诺书范本
2014/03/27 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
政风行风建设整改方案
2014/10/27 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
企业2014年度工作总结
2014/12/10 职场文书
干部个人考察材料
2014/12/24 职场文书
介绍长城的导游词
2015/01/30 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS