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 相关文章推荐
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 Javascript
JS中的form.submit()不能提交表单的错误原因
Oct 08 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 Javascript
AngularJS 支付倒计时功能实现思路
Jun 05 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
es6中比较有用的7个技巧小结
Jul 12 Javascript
vue基本使用--refs获取组件或元素的实例
Nov 07 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
vue cli4下环境变量和模式示例详解
Apr 09 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 开源AJAX框架14种
2009/08/24 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
js form表单input框限制20个字符,10个汉字代码实例
2019/04/12 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python二分法搜索算法实例分析
2015/05/11 Python
Django如何实现内容缓存示例详解
2017/09/24 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
详解Django配置优化方法
2019/11/18 Python
python dict如何定义
2020/09/02 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
学校创先争优活动总结
2014/08/28 职场文书
篮球友谊赛通讯稿
2014/10/10 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
个人思想政治总结
2015/03/05 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
校长新学期寄语2016
2015/12/04 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
导游词之崇武古城
2019/10/07 职场文书
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技