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在页面中添加和除移DOM示例代码
Jun 24 Javascript
JS 实现点击a标签的时候让其背景更换
Oct 15 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
Oct 14 Javascript
深入探讨javascript中的数据类型
Mar 04 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
May 18 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
基于wordpress的ajax写法详解
Jan 02 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
JS实现求5的阶乘示例
Jan 21 Javascript
Vue.js实现tab切换效果
Jul 24 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 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数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
原生js调用json方法总结
2018/02/22 Javascript
vue权限管理系统的实现代码
2019/01/17 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
Python中的并发编程实例
2014/07/07 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
财务分析个人的自荐书范文
2013/11/24 职场文书
设计总监岗位职责
2013/12/07 职场文书
世博会口号
2014/06/20 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
雷锋电影观后感
2015/06/10 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
七年级英语教学反思
2016/02/15 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
详解java如何集成swagger组件
2021/06/21 Java/Android
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android