返回顶部
首页 > 资讯 > 前端开发 > JavaScript >如何解决vue+elementUI复杂表单的验证、数据提交方案问题
  • 962
分享到

如何解决vue+elementUI复杂表单的验证、数据提交方案问题

2024-04-02 19:04:59 962人浏览 薄情痞子
摘要

小编给大家分享一下如何解决Vue+elementUI复杂表单的验证、数据提交方案问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当我们在做后台管理系统时,经常会遇到非常复杂的表单:表单项

小编给大家分享一下如何解决Vue+elementUI复杂表单的验证、数据提交方案问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

当我们在做后台管理系统时,经常会遇到非常复杂的表单:

  • 表单项非常多

  • 在各种表单类型下,显示不同的表单项

  • 在某些条件下,某些表单项会关闭验证

  • 每个表单项还会有其他自定义逻辑,比如 输入框可以插入模板变量、输入字符数量显示、图片上传并显示、富文本 。。。

  • 在这种错综复杂的情况下,完成表单的验证和提交

  • 可以查看具体例子:例子中省略了很多琐碎的功能,只保留整体的复杂表单框架,用于展示解决方案

方案1: 在一个 vue 文件中

所有的表单项显示隐藏、验证、数据获取、提交、自定义等逻辑放在一起

v-if/v-show
elementui

缺点

  • 还是乱

  • 一个 vue 文件,轻轻松松上 2000 行

  • 在我尝试加入一种新的表单类型时,我发现我已经无。从。下。手。

方案2:分离组件

其实很容易想到 根据不同的表单类型,分离出多个相应类型的子表单 。但我在实践时还是遇到了很多问题: 父子表单验证、整体提交数据的获取 等等,并总结出一套解决方案:

1. 子组件

所有的子组件中都需要包含两个方法 validate 、 getData 供父组件调用。

(1) validate 方法

用于验证本身组件的表单项,并返回一个 promise 对象

vaildate() {
 // 返回`elementUI`表单验证的结果(为`promise`对象)
 return this.$refs["ruleFORM"].validate();
},

(2) getData 方法

提供子组件中的数据

getData() {
 // 返回子组件的form
 return this.ruleForm;
},

2. 父组件

(1)策略模式

使用策略模式存储并获取 子表单的 ref (用于获取子表单的方法)和 提交函数 。省略了大量的 if-else 判断。

data:{
 // type和ref名称的映射
 typeRefMap: {
 1: "message",
 2: "mail",
 3: "apppush"
 },
 // type和提交函数的映射。不同类型,接口可能不同
 typeSubmitMap: {
 1: data => alert(`短信模板创建成功${JSON.stringify(data)}`),
 2: data => alert(`邮件模板创建成功${jsON.stringify(data)}`),
 3: data => alert(`push模板创建成功${JSON.stringify(data)}`)
 },
}

(2) submit 方法

用于父子组件表单验证、获取整体数据、调用当前类型提交函数提交数据

因为 elementUI 表单验证的 validate 方法可以返回 promise 结果 ,可以利用 promise 的特性来处理父子表单的验证。 比如 then 函数可以返回另一个 promise 对象 、 catch 可以获取它以上所有 then 的 reject 、 Promise.all 。

父表单验证通过才会验证子表单,存在先后顺序

// 父表单验证通过才会验证子表单,存在先后顺序
submitForm() {
 const templateType = this.typeRefMap[this.indexForm.type];
 this.$refs["indexForm"]
 .validate()
 .then(res => {
 // 父表单验证成功后,验证子表单
 return this.$refs[templateType].vaildate();
 })
 .then(res => {
 // 全部验证通过
 // 获取整体数据
 const reqData = {
 // 获取子组件数据
 ...this.$refs[templateType].getData(),
 ...this.indexForm
 };
 // 获取当前表单类型的提交函数,并提交
 this.typeSubmitMap[this.indexForm.type](reqData);
 })
 .catch(err => {
 console.log(err);
 });
},

父表单,子表单一起验证

submitForm1() {
 const templateType = this.typeRefMap[this.indexForm.type];
 const validate1 = this.$refs["indexForm"].validate();
 const validate2 = this.$refs[templateType].vaildate();
 // 父子表单一起验证
 Promise.all([validate1, validate2])
 .then(res => {
 // 都通过时,发送请求
 const reqData = {
 ...this.$refs[templateType].getData(),
 ...this.indexForm
 };
 this.typeSubmitMap[this.indexForm.type](reqData);
 })
 .catch(err => {
 console.log(err);
 });
},

看完了这篇文章,相信你对“如何解决vue+elementUI复杂表单的验证、数据提交方案问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网JavaScript频道,感谢各位的阅读!

--结束END--

本文标题: 如何解决vue+elementUI复杂表单的验证、数据提交方案问题

本文链接: https://lsjlt.com/news/76426.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决vue+elementUI复杂表单的验证、数据提交方案问题
    小编给大家分享一下如何解决vue+elementUI复杂表单的验证、数据提交方案问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!当我们在做后台管理系统时,经常会遇到非常复杂的表单:表单项...
    99+
    2024-04-02
  • 如何解决iview表单验证的问题
    这篇文章主要为大家展示了“如何解决iview表单验证的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决iview表单验证的问题”这篇文章吧。iview...
    99+
    2024-04-02
  • vue表单为空也能提交的问题如何解决
    这篇文章主要讲解了“vue表单为空也能提交的问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue表单为空也能提交的问题如何解决”吧!vue表单为空也能提交今天在用Vue写表单验证...
    99+
    2023-06-30
  • VUE 表单验证的陷阱和解决方案:让表单验证更轻松
    1. 陷阱:未对表单进行整体验证 问题: 在某些情况下,您可能希望对整个表单进行验证,例如当表单包含多个字段并且您希望确保所有字段都被正确填写时。如果您没有对表单进行整体验证,那么您可能会遇到以下问题: 某些字段未被验证,导致数据不完...
    99+
    2024-02-24
    VUE 表单验证 陷阱 解决方案
  • HTML5如何解决表单验证失败的提示语问题
    这篇文章主要介绍HTML5如何解决表单验证失败的提示语问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!邮箱地址验证: <!DOCTYPE html>...
    99+
    2024-04-02
  • 解决vue表单为空也能提交的问题
    目录vue表单为空也能提交大概是这样写的vue的表单提交方式vue表单收集和提交vue表单为空也能提交 今天在用Vue写表单验证的时候,习惯性把v-model绑定的值设置为null,...
    99+
    2024-04-02
  • BootStrap+Mybatis框架下如何实现表单提交数据重复验证
    这篇文章给大家分享的是有关BootStrap+Mybatis框架下如何实现表单提交数据重复验证的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果:jsp页面:<form&n...
    99+
    2024-04-02
  • redis分布式锁如何解决表单重复提交的问题
    本篇文章为大家展示了redis分布式锁如何解决表单重复提交的问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。假如用户的网速慢,用户点击提交按钮,却因为网速慢,而没有跳转到新的页面,这时的用户会再次...
    99+
    2023-06-21
  • vue如何解决form表单提交但不跳转页面的问题
    这篇文章将为大家详细讲解有关vue如何解决form表单提交但不跳转页面的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue使用@submit.prevent=&qu...
    99+
    2024-04-02
  • vue组件表单数据回显验证及提交的示例分析
    这篇文章主要介绍vue组件表单数据回显验证及提交的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近项目需要到vue开发单页面,所以就研究一下表单数据的回显,验证及提交如何用...
    99+
    2024-04-02
  • redis分布式锁解决表单重复提交的问题
    假如用户的网速慢,用户点击提交按钮,却因为网速慢,而没有跳转到新的页面,这时的用户会再次点击提交按钮,举个例子:用户点击订单页面,当点击提交按钮的时候,也许因为网速的原因,没有跳转到...
    99+
    2024-04-02
  • VUE 表单验证的常见问题解答:一站式解决疑惑
    1. 如何在 VUE 中进行表单验证? 在 VUE 中,可以使用多种方法进行表单验证,最常见的方法是使用 VUE 提供的 v-model 指令。v-model 指令可以将表单元素的值绑定到 VUE 实例的数据属性上,并可以在 VUE 实...
    99+
    2024-02-24
    VUE 表单验证 数据校验 表单提交 错误提示 实时验证
  • thinkphp提交表单收不到数据如何解决
    本篇内容主要讲解“thinkphp提交表单收不到数据如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp提交表单收不到数据如何解决”吧!原因最常见的情况就是在表单提交时,没有对...
    99+
    2023-07-06
  • Vue清除Form表单校验信息的解决方法(清除表单验证上次提示信息)
    目录问题描述解决办法1.使用Iview中的Form组件:清除表单的验证提示信息与字段值2.使用Element Ui中的Form组件2.1 只清除表单验证提示信息,不清除字段值2.2 ...
    99+
    2023-05-15
    Vue 清除Form表单校验信息 Vue 清除表单校验
  • vue 数据(data)赋值问题的解决方案
    总结一下我遇到的一个纠结很久的问题。 在项目中需要用到后台的数据对前端渲染,使用到了vue整合的axios,使用vue中的钩子函数在页面组件挂载完成之后向后台发送一个get请求然后将...
    99+
    2024-04-02
  • 如何解决Ajax提交Form表单页面仍会刷新的问题
    小编给大家分享一下如何解决Ajax提交Form表单页面仍会刷新的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!搞了半天原来点...
    99+
    2024-04-02
  • elementUI的table表格改变数据不更新问题如何解决
    这篇文章主要介绍“elementUI的table表格改变数据不更新问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“elementUI的table表格改变数据不更新问题如何解决”文章能帮助大...
    99+
    2023-06-29
  • vue中项目如何提交form格式数据的表单
    目录vue提交form格式数据的表单先将数据处理数据上传封装文件vue form表单最简写法vue提交form格式数据的表单 先将数据处理 let formData = new Fo...
    99+
    2024-04-02
  • form表单只提交数据而不进行页面跳转的解决方案
    一般的form提交操作写法为 复制代码 代码如下: <form action="saveReport.htm" method="post"> …… <input t...
    99+
    2022-11-15
    form表单 提交数据 页面跳转
  • 如何解决layer关闭弹出窗口触发表单提交的问题
    这篇文章主要介绍如何解决layer关闭弹出窗口触发表单提交的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、前言 表单的代码:<form>  此处理代码...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作