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 hover 延时器实现代码
Mar 12 Javascript
封装html的select标签的js操作实例
Jul 02 Javascript
javascript的数组和常用函数详解
May 09 Javascript
原生js的弹出层且其内的窗口居中
May 14 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
原生JavaScript实现异步多文件上传
Dec 02 Javascript
ES6的新特性概览
Mar 10 Javascript
vue过渡和animate.css结合使用详解
Jun 14 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
js中Generator函数的深入讲解
Apr 07 Javascript
JavaScript设计模式之原型模式详情
Jun 21 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
香妃
2021/03/03 冲泡冲煮
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php中的观察者模式简单实例
2015/01/20 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
jQuery中change事件用法实例
2014/12/26 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
信访工作者先进事迹
2014/01/17 职场文书
服务质量承诺书
2014/03/27 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
教师读书笔记
2015/06/29 职场文书
导游词之山西-五老峰
2019/10/07 职场文书