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 checkbox,radio是否选中的判断代码
Mar 20 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
Apr 01 Javascript
js删除数组元素、清空数组的简单方法(必看)
Jul 27 Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
jQuery实现优雅的弹窗效果(6)
Feb 08 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
Vue $mount实战之实现消息弹窗组件
Apr 22 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
Vue+Spring Boot简单用户登录(附Demo)
Nov 12 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP编程中的常见漏洞和代码实例
2014/08/06 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
php实现生成验证码实例分享
2016/04/10 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
Python测试模块doctest使用解析
2019/08/10 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
2014年小学植树节活动方案
2014/03/02 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技