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 相关文章推荐
JQuery AJAX提交中文乱码的解决方案
Jul 02 Javascript
JavaScript动态调整TextArea高度的代码
Dec 28 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
Feb 06 Javascript
Eclipse配置Javascript开发环境图文教程
Jan 29 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
Oct 01 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
js上传图片预览的实现方法
May 09 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
详解React服务端渲染从入门到精通
Mar 28 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 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将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php实现的顺序线性表示例
2019/05/04 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
python flask 多对多表查询功能
2017/06/25 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
初中英语演讲稿
2014/04/29 职场文书
教师演讲稿开场白
2014/08/25 职场文书
雷锋电影观后感
2015/06/10 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python