Element实现动态增加多个输入框并校验

 更新时间:2023年07月07日 16:30:33   作者:一碗情深  
本文主要介绍了Element实现动态增加多个输入框并校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在做复杂的动态表单,实现业务动态变动,比如有一条需要动态添加的el-form-item中包含了多个输入框,并实现表单验证,但在element-ui组件库中给出的表单校验中没有这样的格式,想要实现这个功能就来跟我一起学习吧。

实现通过按钮动态增加表单并验证必填

先上实现效果图:

实现代码如下:

<el-form-item v-for="(item, index) in form.settings" :key="index" :label="'设置' + (index + 1)">
  <el-form-item label="名称" :prop="'settings.'+index+'.name'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
    <el-input v-model.trim="item.name" style="width: 100px" />
  </el-form-item>
  <el-form-item label="值" :prop="'settings.'+index+'.val'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
    <el-input v-model.trim="item.val" style="width: 100px" />
  </el-form-item>
  <el-form-item label="key" :prop="'settings.'+index+'.key'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
    <el-input v-model.trim="item.key" style="width: 100px" />
  </el-form-item>
  <el-form-item>
    <el-button @click.prevent="removeSetting(item)">删除</el-button>
  </el-form-item>
</el-form-item>
<el-form-item label=" ">
  <el-button icon="el-icon-circle-plus-outline" @click="addSetting()">新增设置</el-button>
</el-form-item>

实现思路

el-form-item 中嵌套 el-form-item ,只需要拼接一下prop就可以直接使用校验:

:prop=“‘settings.’+index+‘.name’”

  • settings 是for循环取值的数组
  • name 是输入框双向绑定的值

:rules=“[{ required: true, message: ‘必填项’, trigger: ‘change’ }]”

  • 校验规则中需要校验的数组

加入以下方法可动态增删表单:

removeSetting(item) {
  var index = this.form.settings.indexOf(item)
  if (index !== -1) {
    this.form.settings.splice(index, 1)
  }
},
addSetting() {
  this.form.settings.push({
    'name': '',
    'key': '',
    'val': ''
  })
},

实现动态多个输入框为行内模式,其它为行外模式

效果如图:

实现思路

el-form 定义 :inline="true" 实现行内模式,以便于动态增加的多个输入框在同一行显示;再通过 Layout 布局 将其它比较小的单个输入框控制在一个行内,通过 row 和 col 组件,并通过 col 组件的 span 属性我们就可以自由地组合布局。

实现代码如下:

<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="120px">
  <el-row>
    <el-col :span="24">
      <el-form-item label="test1" prop="teest1">
        <el-input v-model.trim="form.test1" style="width: 220px" />
      </el-form-item>
    </el-col>
    <el-col :span="24">
      <el-form-item label="test2" prop="test2">
        <el-input v-model.trim="form.test2" style="width: 220px" />
      </el-form-item>
    </el-col>
    <el-col :span="24">
      <el-form-item label="test3" prop="test3">
        <el-input v-model.trim="form.test3" style="width: 220px" />
      </el-form-item>
    </el-col>
    <el-col :span="24">
      <el-form-item v-for="(item, index) in form.settings" :key="index" :label="'设置' + (index + 1)">
        <el-form-item label="名称" :prop="'settings.'+index+'.name'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
          <el-input v-model.trim="item.name" style="width: 100px" />
        </el-form-item>
        <el-form-item label="值" :prop="'settings.'+index+'.val'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
          <el-input v-model.trim="item.val" style="width: 100px" />
        </el-form-item>
        <el-form-item label="key" :prop="'settings.'+index+'.key'" :rules="[{ required: true, message: '必填项', trigger: 'change' }]" label-width="50px">
          <el-input v-model.trim="item.key" style="width: 100px" />
        </el-form-item>
        <el-form-item>
          <el-button @click.prevent="removeSetting(item)">删除</el-button>
        </el-form-item>
      </el-form-item>
    </el-col>
    <el-col :span="24">
      <el-form-item label=" ">
        <el-button icon="el-icon-circle-plus-outline" @click="addSetting()">新增设置</el-button>
      </el-form-item>
    </el-col>
  </el-row>
</el-form>

到此这篇关于Element实现动态增加多个输入框并校验的文章就介绍到这了,更多相关Element动态增加输入框并校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对vue 键盘回车事件的实例讲解

    对vue 键盘回车事件的实例讲解

    今天小编就为大家分享一篇对vue 键盘回车事件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue踩坑记录之echarts动态数据刷新问题

    vue踩坑记录之echarts动态数据刷新问题

    这篇文章主要介绍了vue踩坑记录之echarts动态数据刷新问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Vue router的addRoute方法实现控制权限方法详解

    Vue router的addRoute方法实现控制权限方法详解

    这篇文章主要介绍了vue动态路由添加,vue-router的addRoute方法实现权限控制流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • vue3 setup语法糖下父组件如何调用子组件

    vue3 setup语法糖下父组件如何调用子组件

    这篇文章主要介绍了vue3 setup语法糖下父组件如何调用子组件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue解决使用$http获取数据时报错的问题

    vue解决使用$http获取数据时报错的问题

    今天小编就为大家分享一篇vue解决使用$http获取数据时报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue实现上传图片添加水印

    vue实现上传图片添加水印

    这篇文章主要为大家详细介绍了vue实现上传图片添加水印,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Mpvue中使用Vant Weapp组件库的方法步骤

    Mpvue中使用Vant Weapp组件库的方法步骤

    这篇文章主要介绍了Mpvue中使用Vant Weapp组件库的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 一文详细聊聊vue3的defineProps、defineEmits和defineExpose

    一文详细聊聊vue3的defineProps、defineEmits和defineExpose

    vue3官方文档defineProps和defineEmits都是只能在scriptsetup中使用的编译器宏,下面这篇文章主要给大家介绍了关于vue3的defineProps、defineEmits和defineExpose的相关资料,需要的朋友可以参考下
    2023-02-02
  • Vue使用Echarts画柱状图详解

    Vue使用Echarts画柱状图详解

    数据的重要性我们大家都知道,就算再小的项目中都可能使用几个图表展示,我最近在做项目的过程中也是需要用到图表,最后选择了echarts图表库,这篇文章主要介绍了Vue使用Echarts画柱状图
    2022-12-12
  • Vue 中使用 CSS Modules优雅方法

    Vue 中使用 CSS Modules优雅方法

    这篇文章主要介绍了Vue 中使用 CSS Modules优雅方法,本文文字结合实例代码的形式给大家介绍的非常详细,需要的朋友可以参考下
    2018-04-04

最新评论