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 相关文章推荐
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
APP中javascript+css3实现下拉刷新效果
Jan 27 Javascript
Node.js的Express框架使用上手指南
Mar 12 Javascript
实用又漂亮的BootstrapValidator表单验证插件
May 30 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
带你了解session和cookie作用原理区别和用法
Aug 14 Javascript
vue的事件绑定与方法详解
Aug 16 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
基于Web Audio API实现音频可视化效果
Jun 12 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
Aug 07 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
第六节--访问属性和方法
2006/11/16 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
举例讲解Python的Tornado框架实现数据可视化的教程
2015/05/02 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
python实现装饰器、描述符
2018/02/28 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
PageFactory设计模式基于python实现
2020/04/14 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
会计学自我鉴定
2014/02/06 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
倡导文明标语
2014/06/16 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
python中os.path.join()函数实例用法
2021/05/26 Python