el-form 多层级表单的实现示例


Posted in Javascript onSeptember 10, 2020

前言

本篇文章基于 vue、element-ui

需求

前端开发过程中,经常遇到表单开发的需求,element-ui 为我们带来了极大的便利,前端只需要更专注于前端逻辑。

我们往往会遇到相对复杂的表单,比如下面的表单:

el-form 多层级表单的实现示例

我们设计的时候可以把它设计成 3 级表单,即划分表单到每一个校验项(输入框,下拉框的等)

最终实现效果如下图所示:

el-form 多层级表单的实现示例

实现

el-form 使用,详情可参见: Form 表单

有几个比较重要的属性:

  • ref 相当于标签的 id
  • model 表单数据对象
  • rules 表单验证规则
  • prop 表单域 model 字段
  • label 标签文本

在提交按钮的时候,执行validate方法即可;实时校验可在rules中设置校验项 trigger: 'change'即可

1.el-form 设计

划分表单到每一个校验项(输入框,下拉框的等),可以设计成 3 级表单

奖励设置 这一个校验项稍微复杂一点,可以动态绑定 model 和 rules 实现子项的表单校验

<!-- 一级表单 -->
<el-form class="form" ref="form" :model="form" :rules="form_rules" size="small">
 <el-form-item label="红包活动标题" prop="name">
 <el-input v-model='form.name' placeholder="请输入红包活动标题(活动展示)" />
 </el-form-item>
 <el-form-item :label="`奖励设置(${form.seconde_form.length}/${max_reward_module_num})`" prop="seconde_form">
 <el-card class="reward_module" v-for="(second_form, second_form_index) in form.seconde_form" :key="`${second_form_index}_second_form`">
  <!-- 二级表单 -->
  <el-form class="second_form" :ref="`second_form_${second_form_index}`" :model="second_form" :disabled="is_form_item_disabled" inline size="small">
  <el-form-item prop="packet_name" :key="`${second_form_index}_packet_name`" :rules="[{ required: true, message: '请输入奖励名称', trigger: 'change' }]" style="width:150px;margin-right:20px;">
   <el-input v-model="second_form.packet_name" />
  </el-form-item>
  </el-form>
 </el-card>
 </el-form-item>
</el-form>

2.el-form-item 子项校验

校验比较简单,只需要获取到每一个表单对象,并执行validate即可,二级表单就遍历拿到二级表单独享执行同样的操作

定义 form 数据模型:

form: {
 name: '',
 seconde_form: [
 {
  packet_name: '',
 },
 ],
},

封装一个 check_form 方法

/**
 * 表单校验方法
 * @param {String} form_name
 */
function $check_form(form_name) {
 const form_component = this.$refs[form_name][0] ? this.$refs[form_name][0] : this.$refs[form_name];
 return new Promise((resolve, reject) => {
 form_component.validate(valid => {
  if (valid) {
  resolve();
  } else {
  reject();
  }
 });
 });
}

点击按钮的时候执行 checkParam 方法

async checkParam(form_name) {
 try {
 await this.$check_form(form_name);
 for (let i = 0; i < this.form.seconde_form.length; i++) {
  await this.$check_form(`second_form_${i}`);
 }
 // next step do something
 } catch (e) {
 console.log(e);
 }
},

到此这篇关于el-form 多层级表单的实现示例的文章就介绍到这了,更多相关el-form 多层级表单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
图片之间的切换
Jun 26 Javascript
开发跨浏览器javascript常见注意事项
Jan 01 Javascript
JQuery 表单中textarea字数限制实现代码
Dec 07 Javascript
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
Jul 07 Javascript
动态显示可输入的字数提示还可以输入的字数
Apr 01 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
关于AOP在JS中的实现与应用详解
May 06 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
详解React的回调渲染模式
Sep 10 #Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 #Javascript
关于JavaScript数组去重的一些理解汇总
Sep 10 #Javascript
vue中jsonp插件的使用方法示例
Sep 10 #Javascript
vue 实现一个简单的全局调用弹窗案例
Sep 10 #Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 #Javascript
vue 使用lodash实现对象数组深拷贝操作
Sep 10 #Javascript
You might like
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
理解JS事件循环
2016/01/07 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
javascript回调函数详解
2018/02/06 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
了解重排与重绘
2019/05/29 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Python 详解基本语法_函数_返回值
2017/01/22 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
python Shapely使用指南详解
2020/02/18 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
荷兰最大的鞋子、服装和运动折扣店:Bristol
2021/01/07 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
厉行勤俭节约倡议书
2014/05/16 职场文书
校园活动策划方案
2014/06/13 职场文书
建设工程授权委托书
2014/09/22 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python