问题

在使用vue3.0写项目的时候遇到一个需要遍历的表单,可以增加删除表单对象

不考虑校验问题的话,就是简单的数组包form对象。涉及校验的时候,按照以往的写法就是绑定ref值,然后调用组件的validate方法【form表单中配置rule规则】。

解决方法就是将数组内嵌在一个对象中,对象的结构跟我们定义的form对象结构一致

//我们需要遍历的form对象数组
const arr = [
    {
        name:'',
        sex:'',
        age:'',
    },{
        name:'',
        sex:'',
        age:'',
    }
]
//处理后的对象
const afterForm = {
    name:'',
    sex:'',
    age:'',
    child:arr,//这里的arr就是我们需要遍历的数组【这个key值可以随便取,不一定非得是‘child',尽量不要出现歧义就好】
}

然后就是html中的dom结构写法

<el-dialog v-model="addPageVisible" width="1000px" title="新增页面参数配置" @closed="closeDialog">
      <el-form :model="form" label-width="120px" :inline="true" ref="ruleFormRef" :rules="rules">
        <el-card v-for="(item, index) in form.child" :key="index" shadow="hover" class="mb20">
          <el-form-item label="页面名称:" :prop="`child[${index}].pageName`" :rules="rules.pageName">
            <el-input v-model.trim="item.pageName" class="length-limit"></el-input>
          </el-form-item>
          <el-form-item label="页面路由:" :prop="`child[${index}].routerName`" :rules="rules.routerName">
            <el-input v-model.trim="item.routerName" class="length-limit"></el-input>
          </el-form-item>
          <el-form-item label="页面类型:" :prop="`child[${index}].businessType`" :rules="rules.businessType">
            <el-select v-model.trim="item.businessType" class="length-limit">
              <el-option
                v-for="item in bussinessOptions"
                :value="item.value"
                :label="item.label"
                :key="item.value"
              ></el-option>
            </el-select>
          </el-form-item>
          <div class="pageManage__dialog-foot">
            <el-button type="primary" round @click="addNewForm" v-if="index === allForm.length - 1"
              >新增配置表单</el-button
            >
            <el-button round :disabled="allForm.length === 1 && index === 0" @click="deleteForm(index)"
              >删除表单</el-button
            >
          </div>
        </el-card>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button round @click="addPageVisible = false">取 消</el-button>
          <el-button round type="primary" @click="submitNewPage">提交</el-button>
        </span>
      </template>
    </el-dialog>
//这是我实际项目的页面,所以定义的参数名可能不太一样

写法上跟一般的form表达差不多,只是我们el-form绑定的model值应该是我们处理过的对象,主要有两个地方需要注意

el-form-item上面绑定的prop值应该写成 :prop="child[${index}].pageName",rules也要绑定到对应的值。

const rules = reactive({
      pageName: [{ required: true, message: '请输入页面名称', trigger: 'blur' }],
      routerName: [{ required: true, message: '请输入路由名称', trigger: 'blur' }],
      businessType: [{ required: true, message: '请选择页面类型', trigger: 'change' }],
    })

考虑到我们需要用的数组会有数量变化,可以直接用computed计算属性去得到处理后的数组

const form = computed(() => {
      return { pageName: 'string', routerName: 'string', businessType: 'string', child: allForm.value }
    })

然后就能成功了!!

总结

我自己的理解,就是将我们需要校验的值在一个伪造的form对象中处理,然后内层遍历的的真实form对象可以用指定值的方式去绑定校验规则。

到此这篇关于vue3.0中使用element UI表单遍历校验问题解决的文章就介绍到这了,更多相关element表单遍历校验内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

vue3.0中使用element UI表单遍历校验问题解决的更多相关文章

  1. 使用layui实现左侧菜单栏及动态操作tab项的方法

    这篇文章主要介绍了使用layui实现左侧菜单栏及动态操作tab项的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. 在iOS上绘制扭曲的文本

    使用iOS9及更高版本中提供的标准API,如何在绘制文本时实现扭曲效果?

  3. ios – 如果Element符合给定的协议,则扩展阵列以符合协议

    如果是这样,语法是什么?解决方法Swift4.2在Swift4.2中,我能够使用符合这样的协议的元素扩展数组:

  4. ios – 如何在swift中获取2数组的常见元素列表

    (双关语)编辑:,你可以这样做这个实现是丑陋的.

  5. 初识Swift集合之字典集合

    这个函数也会返回被替换或者增加的值。

  6. swift的一些知识点演练

    表示可以有值,也可以没有值//?如果对象为空,就不会调用后面的方法,感觉上和oc中给nil发送消息类似varstr:Nsstring?str="hello"//打印可选项的时候,同时会输出一个Optional,提示开发者,这是一个可选项println(str?.length)letl=10//目前的代码存在什么风险?如果str没有设置初始值,会直接崩溃//苹果把判断对象是否有内容的工作交给了程序员//letlen=l+str!用来快速判断对象是否为nilletlen2=l+(str?0)//以下代码和上面

  7. swift 基础笔记四数组

  8. Swift值字典使用

    字典是一种用来存放相同类型的数据项的集合。Swift中字典的概念和现实世界中的字典的概念很相似,都是通过索引来查里面特定的值。修改一个值5、删除字典键值对四、字典遍历同数组一样,字典遍历也需要使用forin循环。

  9. Swift 函数Count,Filter,Map,Reduce

    Count-统计数量文档示例Filter-条件过滤文档示例-过滤长度大于4的字符串也可以简化Map-映射集合类型,返回数组文档示例同样可以简化Reduce-把数组结合到一起文档示例可以简化进一步简化

  10. Swift学习笔记十三——区间运算符和for-in循环

    区间运算符RangeOperator也是Swift的一个比较突出的特点。可以用来表示一段数据的区域。区间运算符主要可以分为以下两类:ClosedRangeOperator:闭区间[a,b]a...b:注意:a和b之间是三个点Half-ClosedRangeOperator:前闭后开区间a..

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部