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 相关文章推荐
认识延迟时间为0的setTimeout
May 16 Javascript
JS设置下拉列表框当前所选值的方法
Dec 22 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
浅析JavaScript回调函数应用
May 22 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
原生javascript实现读写CSS样式的方法详解
Feb 20 Javascript
详解vue+vueRouter+webpack的简单实例
Jun 17 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
Vue项目路由刷新的实现代码
Apr 17 Javascript
js实现表格数据搜索
Aug 09 Javascript
vue+Element-ui实现登录注册表单
Nov 17 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 文件类型判断代码
2009/03/13 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
显示、隐藏密码
2006/07/01 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
Python模块学习 filecmp 文件比较
2012/08/27 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
岗位职责的定义
2013/11/10 职场文书
开服装店计划书
2014/08/15 职场文书
元旦标语大全
2014/10/09 职场文书
MySQL Router的安装部署
2021/04/24 MySQL