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实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
Jquery带搜索框的下拉菜单
May 06 Javascript
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
修改或扩展jQuery原生方法的代码实例
Jan 13 Javascript
javascript函数特点实例分析
May 14 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
javascript滚轮事件基础实例讲解(37)
Feb 14 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
微信小程序实现文字从右向左无限滚动
Nov 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获取文件名后缀
2013/06/09 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
jquery ready函数源代码研究
2009/12/06 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
五步轻松实现zTree的使用
2017/11/01 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
SQL SERVER面试资料
2013/03/30 面试题
授权委托书范本
2014/04/03 职场文书
英文请假条
2014/04/11 职场文书
迎新晚会策划方案
2014/06/13 职场文书
文明社区申报材料
2014/08/21 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
六年级数学教学反思
2016/02/16 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis