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支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
模仿JQuery sortable效果 代码有错但值得看看
Nov 05 Javascript
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
js单例模式的两种方案
Oct 22 Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
Jan 13 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
Sep 13 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
jQuery中使用validate插件校验表单功能
May 24 jQuery
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版本实现代码
2012/09/15 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
js常用函数 不错
2006/09/08 Javascript
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
jQuery查找节点方法完整实例
2016/09/13 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
微信小程序录音与播放录音功能
2017/12/25 Javascript
如何实现双向绑定mvvm的原理实现
2019/05/28 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python I/O与进程的详细讲解
2019/03/08 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
维也纳通行证:Vienna PASS
2019/07/18 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
TCP/IP模型的分界线
2012/12/01 面试题
优秀的教师个人的中文求职信
2013/09/21 职场文书
临床医学专业个人的自我评价
2013/09/27 职场文书
个人委托函范文
2015/01/29 职场文书
单位介绍信格式范文
2015/05/04 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
javascript实现计算器功能详解流程
2021/11/01 Javascript