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实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
js禁止页面刷新与后退的方法
Jun 08 Javascript
node.js 中国天气预报 简单实现
Jun 06 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
Nov 22 Javascript
ES6新数据结构Set与WeakSet用法分析
Mar 31 Javascript
JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
Jun 20 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
Sep 02 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
浅谈Vue SSR 的 Cookies 问题
Nov 20 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 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开发模式(简写版)
2007/03/15 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python paramiko实现ssh远程访问的方法
2013/12/03 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python实现五子棋游戏
2019/06/18 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python实现银行管理系统
2019/10/25 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
Python数据相关系数矩阵和热力图轻松实现教程
2020/06/16 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
初三家长会邀请函
2014/01/18 职场文书
安全横幅标语
2014/06/09 职场文书
大四学生个人总结
2015/02/15 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
Python基础之字符串格式化详解
2021/04/21 Python