赞
踩
项目中有需求,一行显示多个表单项,同时,这些表单项要支持动态增加与验证,实现效果如下:
点击右侧的加号就会生成一行部门数据,并支持删除与验证.
实现思路是:
一行展示多个表单项,使用layout布局实现(即el-row与el-col);
动态添加行,通过for循环div来实现;
主要的问题是验证,参考官网的例子,需要动态设置prop,并在单个表单项中添加验证,例子如下:
只不过官网是新增的一个表单项,我们是三个.
整合之后,具体的实现代码如下:
- <el-form :model="form" :rules="rules" label-width="80px">
- <!--省略,其他表单项-->
- <el-row class="row" v-for="(item,index) in form.bms" :key="index">
- <label for="td" class="el-form-item__label label" style="width: 80px;" :style="{visibility:index===0?'visible':'hidden'}">部门</label><!--设置动态标签,只在部门第一行显示-->
- <el-col :span="6">
- <el-form-item :prop="'bms.'+index+'.bm'"
- :rules="{
- required: true, message: '请选择部门', trigger: 'blur'
- }">
- <el-select class="input" v-model="item.bm">
- <el-option v-for="item in deptList" :key="item.name" :label="item.name" :value="item.name"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item :prop="'bms.'+index+'.bmrs'"
- :rules="{
- required: true, message: '请输入人数', trigger: 'blur'
- }">
- <el-input class="input" v-model="item.bmrs" type="number" placeholder="人数"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item :prop="'bms.'+index+'.bz'">
- <el-input class="input" v-model="item.bz" placeholder="备注"></el-input>
-
- </el-form-item>
- </el-col>
- <el-col :span="1">
- <i class="el-icon-circle-plus" @click="addDept"></i>
- <i v-if="form.bms.length>1" class="el-icon-remove-outline" @click="delDept(index)"></i>
- </el-col>
- </el-row>
- <!--省略,其他表单项-->
- </el-form>
注意: for循环的key值不要使用item中的值 ,否则会导致每次输入都会重新更新视图,导致输入框没输入一个字符就会失去焦点
表单数据:
- form:{
- td:"",
- bms:[{bm:"",bmrs:"",bz:""}],//默认展示一行部门数据
- rs:""
- }
动态新增与删除行的方法:
- addDept(){
- this.form.bms.push({bm:"",bmrs:"",bz:""});
- },
- delDept(index){
- this.form.bms.splice(index,1);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。