vue+element,form循环嵌套表单 、动态添加表单、嵌套表单自定义校验规则

这篇具有很好参考价值的文章主要介绍了vue+element,form循环嵌套表单 、动态添加表单、嵌套表单自定义校验规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文发布链接:https://juejin.cn/post/7181752966611730492

需求:

  • 可点击新增,自动添加表单。(这个不难v-for即可)
  • 可自定义方法校验添加的表单内容。(需要掌握element组件的规则,本人没有熟读官网,碰壁好多次才整理出来这篇文章。重要的事说3遍:看官网看官网看官网

效果图:
vue动态生成新表单并且添加验证校验规则,vue.js,javascript,前端

动态嵌套校验的难点主要是如何绑定prop属性,自定义方法的难点主要是如何在嵌套的基础上设置自定义方法以及如何将v-for的索引传入校验

Form-Item Attributes

参数 说明 类型 可选值 默认值
prop 表单域 model 字段,在使用 validate、resetFields 方法的情况下,该属性是必填的 string 传入 Form 组件的 model 中的字段

可看到,这里prop是传入 Form 组件的 model 中的字段。需要注意的是,prop字段是有相对路径的,而不是随意的一个字段名就可以,需要按照element的格式传入相应的字段

form循环嵌套表单

参考官网的“动态增减表单项”绑定prop属性,动态增减可以直接照搬这个示例(官网就是这么强大,你想要的都有)

vue动态生成新表单并且添加验证校验规则,vue.js,javascript,前端

vue动态生成新表单并且添加验证校验规则,vue.js,javascript,前端

一级嵌套

循环:<div v-for="(work,i) in formdata.jobList" :key="i">
prop绑定::prop="`jobList[${i}].jobContent`"
规则绑定::rules="[{ required: true, message: '作业内容不能为空', trigger: 'blur' }]"

注:prop不能直接使用work.jobContent
jobList[${i}].jobContent是elementui规定的格式,渲染后的结果为jobList[i].jobContent

二级嵌套

循环:<div style="padding: 10px 20px" v-for="(item,j) in work.specialJobList" :key="j">
prop绑定::prop="`jobList[${i}].specialJobList[${j}].type`"
规则绑定::rules="[{ required: true, message: '请选择特殊作业', trigger: 'blur' }]"

动态添加表单

很显然,动态添加只需要改变v-for的数组即可,新增作业活动如下:

<div class="addBox" type="primary" size="mini" @click="addWorkActivity()>
    <img src="static/img/u15.svg" alt="" class="addIcon" ">
    <span class="operate" >新增作业活动</span>
</div>
// 新增作业活动
addWorkActivity(){
    let obj = {jobContent:"",specialJobList:[{type:"",itemsList:[]}]};
    if(!Array.isArray(this.formdata.jobList)){
        this.formdata.jobList = [];
    }
    this.formdata.jobList.push(obj);
},

嵌套中的表单自定义校验规则

这里需要校验作业内容不能为空,且作业内容不能重复,这里需要将修改的内容和动态的数组对比还需要调服务判断数据库中有无相同的内容来校验,就不能使用简单的校验,需要自定义校验validator

绑定自定义函数,使用el-form-itemrules属性的validator。自定义校验可参考官网的自定义校验规则

vue动态生成新表单并且添加验证校验规则,vue.js,javascript,前端

vue动态生成新表单并且添加验证校验规则,vue.js,javascript,前端

这里写在el-form-item上与其类似,由于是动态绑定的prop属性,所以这里用el-formrules属性很难校验

循环:<div v-for="(work,i) in formdata.jobList" :key="i">
prop绑定::prop="`jobList[${i}].jobContent`"
规则绑定::rules="[{ required: true, validator:(rule, value, callback)=> checkContent(rule, value, callback,i), trigger: ['blur', 'change']}]"
// 表单校验内容是否重复
async checkContent(rule, value, callback,index){
    if (!value) {
        callback(new Error("作业内容不能为空!"));
    } else {
        let isRepeat = false;// 默认不重复
        for(let i = 0; i < this.formdata.jobList.length; i++){
            if (this.formdata.jobList[i].jobContent == value && i !== index){
                isRepeat = true;
                callback(new Error(`已存在相同的作业内容,请重新输入!`));
                return;
            }
        }
        if(!isRepeat){
            // 页面没有重复时 调服务判断数据库中是否有重复
            let params = {
                jobContent:value,
                id:this.formdata.id
            }
            const res = await serviceValid();// 调用服务校验
            if (res.data.body === "已有重复作业活动") {
                callback(new Error(`已存在相同的作业内容,请重新输入!`));
            }
        }
        callback();
    }
}

注:这里使用 validator:(rule, value, callback)=> checkContent(rule, value, callback,i)主要是为了获得当前索引,如果不需要,直接绑定函数名即可:validator:checkContent

checkContent(rule, value, callback){……}文章来源地址https://www.toymoban.com/news/detail-764630.html

到了这里,关于vue+element,form循环嵌套表单 、动态添加表单、嵌套表单自定义校验规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue + element-ui 循环生成指定form表单

    最近遇到一个需要超级写超级多字段的表单,初略计算大概四十来个吧字段吧,/(ㄒoㄒ)/~~,这也太麻烦了,想了想能不能简单封装一下,找到了个巨人,嗯哼,就踩一下吧 参考文章: Vue3.0 根据JSON对象生成指定form表单 上面文章是vue3的,逻辑都一样。以下是vue2 我的写法 注

    2024年02月11日
    浏览(56)
  • Element UI form表单及select下拉框实现动态添加和删除

    需求为可动态选择用户及部门,并具备回显功能 结合antv x6 流程图,实现需求,每个流程图节点均可设置当前节点对应审批部门和用户,部门会签节点可设置多部门多用户,动态添加部门及用户。 当前节点已配置人员部门可回显,当前节点已配置人员删除,回显为空。

    2024年02月11日
    浏览(42)
  • Element Plus Form 动态表单自定义校验规则使用教程

    Element Plus,基于 Vue 3,面向设计师和开发者的组件库 Element Plus 官网:https://element-plus.org/zh-CN/ Element Plus Form 动态表单自定义效验规则,官网示例代码中没有,官网示例中的动态表单是固定的规则,本文讲解动态表单自定义规则的使用 目录 1、官网动态表单示例代码 2、表单自

    2024年01月18日
    浏览(52)
  • Vue3 element-plus表单嵌套表格实现动态表单验证

    部分效果图如下: 另表格有添加和删除按钮,点击提交进行表单验证。 首先data格式必须是对象包裹数组 给表单绑定form数据 表格绑定tableData数据 给表单项增加验证规则 rules对应data rules对象,prop对应表单字段(注意是表格里每一行对应的字段 forms.tableData[下标].key) prop的关

    2024年02月14日
    浏览(44)
  • Element-Puls Form表单内嵌套el-table表格,根据表格复选框多选或单选动态设置行的验证规则

    根据 Table 表格内的复选框来控制当前选中行是否添加必填校验规则 我们需要设置一个 flag 来标识已勾选的行,el-table渲染数据结构是数组对象形式,我们可以在每个对象中手动加如一个标识,例如默认:selected : false,如你的源数据中已有类似key,则可用它作于唯一标识 htm

    2024年02月02日
    浏览(63)
  • el-form 动态表单增减项 (vue+element ui)

    1、点击”+“,弹出弹窗,新增一项,点击”-“,删除当前项 代码展示: html代码: 注意: el-form-item(表单项)循环,绑定的数组写在form当中 表单: 新增参数弹框: data: methods: 1、点击新增,弹出新增弹窗,添加表单项 2、点击”-“,删除当前表单项

    2024年02月02日
    浏览(52)
  • Vue+Element-UI el-form表单动态检验

    业务需求: 表单el-form 有一表单项:发布时间 ,有5个选项:今天、24小时、近3天、近7天和自定义时间,其中当选择自定义时间时,后面跟着的日期时间选择器是必填的,选中其他选项时则不需要。这就需要做到表单的动态检验。 最开始实现方式是在当前表单项中设置规则

    2024年02月11日
    浏览(57)
  • VUE系列之element表单el-form-item自定义label

    这里要加提示,所以自定义label,加了问号的提示 具体代码实现如下: 核心使用slot = label  

    2024年02月16日
    浏览(59)
  • vue+Element UI 实现动态表单(点击按钮增删表格及嵌套输入框的增删)(1)

    el-button size=“small” @click=“addTable”新增 el-button size=“small” @click=“delTable”删除 el-table ref=“table” :data=“tableDataBind.taAssessltems” tooltip-effect=“dark” border @selection-change=“selectRow” 规格: 重量: 数量: 加工费: el-button size=“mini” type=“primary” icon=“el-icon-circle-plus-ou

    2024年04月13日
    浏览(46)
  • vue2:elementUI中Form 表单在特定情况下做动态rules添加删除

    先看需求: (不想看的直接拉到最后)  【需求说明】 6、如状态为上架时,库存为必填,下架状态时,库存为可填,前面无星号 实现方法:使用this.$set()和this.$delete() 上代码: 由于设计商业隐私,代码只上传一部分:   表单data中原来的rules: 不添加上下架状态的rules 在

    2023年04月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包