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 相关文章推荐
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
Mar 01 Javascript
jQuery侧边栏实现代码
May 06 Javascript
浅析在javascript中创建对象的各种模式
May 06 Javascript
jQuery实现图片向左向右切换效果的简单实例
May 18 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
js闭包学习心得总结
Apr 17 Javascript
JS的Ajax与后端交互数据的实例
Aug 08 Javascript
vue监听input标签的value值方法
Aug 27 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 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
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
php实现将Session写入数据库
2015/07/26 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
python二叉树遍历的实现方法
2013/11/21 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
婴儿地球:Baby Earth
2018/12/25 全球购物
毕业生就业自荐信
2013/12/04 职场文书
英文自荐信
2013/12/15 职场文书
库房主管岗位职责
2013/12/31 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
上班迟到检讨书
2014/09/15 职场文书
求职自我评价范文100字
2014/09/23 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书