vue  elementUI 表单嵌套验证的实例代码


Posted in Javascript onNovember 06, 2019

一:表单一级验证

element中from组件内表单验证通过使用el-form标签,绑定model和rules属性进行表单验证

<el-form ref="form" :model="form" :rules="rules" label-width="110px" @submit.native.prevent>
<el-form-item label="客户名称:" size="small" prop="belongId">
  <el-input v-show="false" v-model="form.belongId"></el-input>
  <ComSelectorCustomer :value="form.customerName" @change="choice"></ComSelectorCustomer>
</el-form-item>

简单的表单验证很简单,在prop内绑定验证属性,然后在rules对象内定义验证方法

rules: {
     belongId: [{
      required: true,
      message: '不能为空',
      trigger: 'change'
     }]
}

二:模板一次循环渲染时表单验证

<el-row v-for="(item, index) in form.warehouseList" :key="index">
  <el-col :span="21">
    <el-form-item label="厂库名称:" size="small" :prop="'warehouseList.' + index + '.factoryName'">
      <el-select
       v-model="item.factoryName"
       clearable
       filterable>
       <el-option
         v-for="(child, ind) in factoryList"
         :key="ind"
         :label="child.label"
         :disabled="child.disabled"
         :value="child.value"></el-option>
      </el-select>
    </el-form-item>
   </el-col>
</el-row>

循环内模板验证prop绑定值就是一个问题了,因为它是循环出来的没办法直接写死在内,所以prop就需要动态绑定验证属性,这里需要注意一下,动态prop内绑定的是要和form内定义的属性名以及model绑定的值要对应上。比如上面prop里的factoryName,form.warehouseList里子元素也要有这个属性,select中model绑定的也应该是factoryName。因为是循环出来的,所以model绑定的就是‘item.factoryName'。

如果prop内绑定的验证属性名对应不上,控制台一般都会报下面这个错误

 ![cuowu.png](/img/bVbzWSa)

三:循环嵌套循环的表单验证

比如说是这种:

from: {
    warehouseList: [{
      productList: [{
        productNumber: '',
        productUnitPrice: ''
      }]
    }]
  }

要是需要监听productList中的productNumber,并且进行验证,这就是第三层的验证。

<div v-for="(itemChild, itemIndex) in item.productList" :key="itemIndex">
   <el-col :span="9">
   <el-form-item label="客户品名:" label-width="110px" size="small" :prop="'warehouseList.' + index + '.productList.' + itemIndex + '.productName'">
    <el-input v-show="false" v-model="itemChild.productName"></el-input>
    <ComSelectorProduct :value="itemChild.productName"
    @change="choice"></ComSelectorProduct>
   </el-form-item>
 </el-col>
 <el-col :span="4">
   <el-form-item label="数量:" label-width="60px" size="small" :prop="'warehouseList.' + index + '.productList.' + itemIndex + '.productNumber'">
    <el-input clearable v-model="itemChild.productNumber" placeholder="数量"></el-input>
   </el-form-item>
 </el-col>
</div>

prop内绑定的值需要把第一层循环时的父元素warehouseList一并写上一直写到input内绑定的model值

:prop="'warehouseList.' + index + '.productList.' + itemIndex + '.productName'"

验证方法:

setRulesProduct() {
        let that = this
        let list1 = that.form.warehouseList
        // let list2 = that.form.warehouseList.productList
        if (list1 && list1.length) {
          list1.forEach((item, i) => {
            that.rules['warehouseList.' + i + '.factoryName'] = [{
              required: true,
              message: '请选择厂库',
              trigger: 'change'
            }]
            that.rules['warehouseList.' + i + '.orderNumber'] = [{
              required: true,
              min: 1,
              max: 20,
              validator: (rule, value, callback) => {
                if (!value) {
                  callback(new Error('订单号不能为空'))
                } else if (value.length < 1 || value.length > 20) {
                  callback(new Error('订单号请保持在1-20字符内'))
                } else {
                  callback()
                }
              },
              trigger: 'blur'
            }]
            that.rules['warehouseList.' + i + '.deliveryTime'] = [{
              required: true,
              message: '请选择日期',
              trigger: 'blur'
            }]

            if (item.productList && item.productList.length) {
              item.productList.forEach((childItem, childIndex) => {
                that.rules['warehouseList.' + i + '.productList.' + childIndex + '.productName'] = [{
                  required: true,
                  message: '请选择产品',
                  trigger: 'change'
                }]
                that.rules['warehouseList.' + i + '.productList.' + childIndex + '.productNumber'] = [{
                  required: true,
                  min: 1,
                  max: 20,
                  validator: (rule, value, callback) => {
                    if (!value) {
                      callback(new Error('产品数量不能为空'))
                    } else if (value.length < 1 || value.length > 20) {
                      callback(new Error('产品数量请保持在1-20字符内'))
                    } else {
                      callback()
                    }
                  },
                  trigger: 'blur'
                }]
                that.rules['warehouseList.' + i + '.productList.' + childIndex + '.productUnitPrice'] = [{
                  required: true,
                  message: '请填写单价',
                  trigger: 'blur'
                }]
              })
            }
          })
        }
      }

在组件创建时调用次方法就可以了。多层嵌套验证就搞定了,互不影响。

最重要的一点就是 循环时prop内绑定的验证属性名 一定要和model绑定的值相对应上,循环嵌套过多的就需要一直往上层找,找到最上层元素。

总结

以上所述是小编给大家介绍的vue + elementUI 表单嵌套验证,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 学习笔记(八)javascript对象
Apr 12 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
Feb 07 Javascript
javascript中取前n天日期的两种方法分享
Jan 26 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 Javascript
基于JavaScript实现生成名片、链接等二维码
Sep 20 Javascript
JS实现鼠标滑过链接改变网页背景颜色的方法
Oct 20 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
Bootstrap Table使用方法解析
Oct 19 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
vue.js click点击事件获取当前元素对象的操作
Aug 07 Javascript
微信小程序网络请求实现过程解析
Nov 06 #Javascript
vue 自定义右键样式的实例代码
Nov 06 #Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
Nov 06 #Javascript
vue 解决computed修改data数据的问题
Nov 06 #Javascript
微信小程序页面渲染实现方法
Nov 06 #Javascript
微信小程序页面间传递数组对象方法解析
Nov 06 #Javascript
vue 获取及修改store.js里的公共变量实例
Nov 06 #Javascript
You might like
PHPMailer安装方法及简单实例
2008/11/25 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
python getpass实现密文实例详解
2019/09/24 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
Python列表推导式实现代码实例
2020/09/09 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
一套.net面试题及答案
2016/11/02 面试题
个人自我评价范文
2014/02/05 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
如何写辞职书
2015/02/26 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
董事长新年致辞
2015/07/29 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android