elementui表单的验证问题

news2024/11/27 8:41:49

elementui表单的验证问题

element ui是基于vue的一个ui框架,用起来还是挺不错的,但是有时候还是会遇到一些摸不着头脑的情况。

​ 我在打开一个新增数据的对话框的时候出现了一个问题,明明是新增,但是一打开就出现了错误提示,这肯定是不对的,用户体验也是极其不好的。到底是什么原因导致的呢?

在这里插入图片描述

​ 经过我的检查,发现主要原因就是我的新增和修改的对话框是用的同一个,而显示错误提示的都是trigger类型为change的。

​ 具体原因就是因为新增和修改要操作的字段都是一摸一样的,我肯定也不会去写两套代码了呀,通过一些变量我就能区分。但是这就导致了如果我刚刚进入页面的时候,如果第一次点击的是修改按钮,弹出的是修改对话框,那么我会从数据库里拿数据进行数据展示,会将表单的数据初始化一次。那么我第二次点击的按钮是新增按钮时,我肯定会把表单的数据全部置空,从而触发change事件,然后触发表单校验。

​ 部分代码如下:

data() {
      return {
        formData: {"groupType": null}, // 表单数据,最开始为null
        formVisible: false // 表单是否显示,
		rules: {groupType: [{ required: true, message: '请输入分组类型', trigger: 'change' }]} // 配置表单验证,在页面上“分组类型”其实是一个下拉选择框
     }
},
created() {
	// 	进行一些初始化
},
methods: {
	showUpdateDialog: function () {
		// 加载数据
		this.$http.get(...).then(
			response => {
				// 做一些数据处理
				...
				// 显示对话框
				this.formVisible = true;
			},
        	response => console.log(response)
		);
	},
	showCreateDialog: function () {
		this.$refs['form'].resetFields();
		...
	}
}

​ 然后我在网上搜了一下解决办法,大部分都是说用this.$refs[‘form’].resetFields()重置一下就行,我试了但是不行,然后我去看了一下官方文档,重置是重置了,但是是重置为初始值,但是我仔细去研究了一下这个初始值,其实就是第一次给form表单赋值时,它在页面上渲染出来的值。对应上我的操作流程,其实就是我第一次打开修改对话框时,从数据库里拿到的数据,只能说是白给。

在这里插入图片描述

​ 虽然白给了,但没有完全白给,官方的这段话其实已经给了答案,稍微调整一下代码。在调用showUpdateDialog方法打开修改对话框时,先直接把对话框显示出来,因为formData中分组类型的初始值是为null,这个时候表单就会渲染,那么下次用resetFields方法重置时,就能帮我重置回null。

​ 部分代码如下:

data() {
      return {
        formData: {"groupType": null}, // 表单数据,最开始为null
        formVisible: false // 表单是否显示,
		rules: {groupType: [{ required: true, message: '请输入分组类型', trigger: 'change' }]} // 配置表单验证,在页面上“分组类型”其实是一个下拉选择框
     }
},
created() {
	// 	进行一些初始化
},
methods: {
	showUpdateDialog: function () {
		// 显示对话框
		this.formVisible = true;
		// 加载数据
		this.$http.get(...).then(
			response => {
				// 做一些数据处理
				...
			},
        	response => console.log(response)
		);
	},
	showCreateDialog: function () {
		this.$refs['form'].resetFields();
		...
	}
}

​ 虽然已经能解决这个问题了,但是还是有一个问题,如果用户使用的时候正好网络不好,但是修改对话框已经打开了,以前的数据还没有加载出来,如果这时候用户胡乱操作很容易造成异常,所以还是等拿到数据后再打开对话框最好。

​ 再次调整代码:

data() {
      return {
        formData: {"groupType": null}, // 表单数据,最开始为null
        formVisible: true // 表单直接显示,
		rules: {groupType: [{ required: true, message: '请输入分组类型', trigger: 'change' }]} // 配置表单验证,在页面上“分组类型”其实是一个下拉选择框
     }
},
mounted(){
	// 隐藏表单
	this.dialogFormVisible = false;
},
created() {
	// 	进行一些初始化
},
methods: {
	showUpdateDialog: function () {
		// 加载数据
		this.$http.get(...).then(
			response => {
				// 做一些数据处理
				...
				// 显示对话框
				this.formVisible = true;
			},
        	response => console.log(response)
		);
	},
	showCreateDialog: function () {
		this.$refs['form'].resetFields();
		...
	}
}

​ 在初始值设置的时候,就直接把formVisible设置为true,把表单渲染出来,而此时groupType为null,然后在mounted钩子函数中隐藏表单,这样在用户的感知中,表单一直没有显示过,但其实表单数据的初始化已经完成了。这里为什么用mounted而不是在created里做这个事呢,先看看两者的区别:

​ 在Vue中,created和mounted是两个生命周期钩子函数。

​ created钩子函数在Vue实例创建完成后立即调用,此时模板和虚拟DOM都未渲染成真实的DOM。在这个阶段,可以进行一些初始化操作,如数据的获取、事件的监听等。

​ mounted钩子函数在Vue实例挂载到真实DOM后调用,此时模板和虚拟DOM已经渲染成真实的DOM。在这个阶段,可以进行一些需要操作DOM的操作,如获取DOM元素、操作DOM等。

​ 总的来说,created适合进行数据的初始化和事件的监听等操作,而mounted适合进行DOM操作和一些需要等待DOM渲染后才能进行的操作。


​ 至此,问题彻底解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux虚拟化指南:构建虚拟化环境

虚拟化技术在计算领域具有广泛的应用,能够提高硬件资源的利用率、降低维护成本,并实现灵活的资源分配。Linux作为一种开源操作系统,在虚拟化方面也有多种选择和工具可供使用。下面将介绍如何构建Linux虚拟化环境,并提供一些建议和…

skywalking入门

参考: https://www.jianshu.com/p/ffa7ddcda4ab 参考: https://developer.aliyun.com/article/1201085 skywalking(APM) 调用链路分析以及应用监控分析工具 Skywalking主要由三大部分组成:agent、collector、webapp-…

强怼美国政府,Zlibrary高调复活,官宣2023年最新网址,免费下载海量电子书籍

去年11月,号称是全球最大电子图书馆的Z-Library被美国FBI封禁,连同下线的还有多达249个备用、影子、镜像、关联域名等。 随后,美司法部在阿根廷逮捕了Z-Library网站幕后的两位策划者。他们被控盗取文化作品牟利,经常在新书出版后几…

HTML5中使用video标签

参考链接 <videocontrolscontrolslist"nodownload noplaybackrate"disablePictureInPicture"true"disableRemotePlayback"true"src"https://www.runoob.com/try/demo_source/movie.mp4"></video>隐藏下载&#xff1a;nod…

ElasticSearch从入门到精通(一)

1. 初识 ElasticSearch 传统数据库查询的问题&#xff1a;如果使用模糊查询&#xff0c;左边有通配符&#xff0c;不会走索引&#xff0c;全表扫描&#xff0c;效率比较慢 倒排索引 将文档进行分词&#xff0c;形成词条和 id 的对应关系即为反向索引。 以唐诗为例&#xff0c…

解决域控制器的传感器配置问题

gpu加速计划 下载东西有时会报没有apt-utils&#xff0c;所以最好先给它下了&#xff1a; sudo apt-get install apt-utils验证&#xff1a; python #输入库 import torch #查看版本 print(torch.__version__) #查看gpu是否可用 torch.cuda.is_available() #返回设备gpu个数…

跨端开发方案之桌面应用小程序

小程序容器技术的未来是充满希望的&#xff0c;它为我们开辟了一个全新的数字世界&#xff0c;连接了桌面操作系统和移动生态系统之间的界限。正如技术不断演进&#xff0c;我们可以期待着更多的创新和发展&#xff0c;为用户带来更加便捷和多样化的应用体验。这一技术的推广和…

用C++写一个生成n个m之内的随机整数的函数

#include <iostream> #include <cstdlib> #include <ctime>using namespace std;void generateRandomNumbers(int n, int m) {srand(time(NULL)); // 初始化随机数种子for (int i 0; i < n; i) {int num rand() % m 1; // 生成 1 到 m 之间的随机整数c…

windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

麒麟信安的2023世界计算大会时刻

9月15至16日&#xff0c;由工业和信息化部、湖南省人民政府主办的2023世界计算大会在长沙隆重举行。麒麟信安连续五年亮相世界计算大会&#xff0c;本届大会麒麟信安作为计算产业的重要建设者、国家新一代自主安全计算系统产业集群内核心企业&#xff0c;在展览展示、主题演讲、…

基于SSM的金鱼销售平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

LeetCode 23. 合并 K 个升序链表

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 首先我们实现一个合并两个有序链表的操作&#xff0c;然后使用归并的思想对数组中的链表进行排序。 代码 /*** Definition for singly-linked list.* struct ListNode {* in…

基础组件(线程池、内存池、异步请求池、Mysql连接池)

文章目录 1、概述2、线程池2、异步请求池3、内存池 1、概述 池化技术&#xff0c;减少了资源创建次数&#xff0c;提高了程序响应性能&#xff0c;特别是在高并发场景下&#xff0c;当程序7*24小时运行&#xff0c;创建资源可能会出现耗时较长和失败等问题&#xff0c;池化技术…

Spring事件机制之ApplicationEvent

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

vue3 - 前端 Vue 项目提交GitHub 使用Actions自动化部署

GitHub Demo 地址 在线预览 参考文章 使用GithubActions发布Vue网站到GithubPage 使用Github Actions将Vue项目部署到Github Pages 前端使用github pages 部署自己的网站 GitHub Actions自动化部署前端项目指南 前言 vue前端项目写好之后&#xff0c;想部署到线上通过在线地址…

中秋接月饼

hellow大家好&#xff0c;中秋佳节到了&#xff0c;欢乐度节的同时&#xff0c;技术也要跟上呀&#xff0c;这次我们通过canvas实现一个中秋接月饼的小游戏&#xff0c;三连不迷路哦~ 展示一下游戏成品&#xff1a; 准备游戏背景 首先我们将游戏背景界面绘制出来。 游戏背景…

滚雪球学Java(37):深入了解Java方法作用域和生命周期,让你写出更高效的代码

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

微信重磅更新!有人已经涨粉好几万了!

公众号又更新了。 一个是发布功能升级&#xff0c;新发布的内容将展示在公众号主页&#xff0c;并有机会获得平台推荐。但仍然不会推送给用户&#xff0c;这是除了次数以外&#xff0c;和群发文章仅有的区别了。 ▲ 图片来源&#xff1a;微信公众号平台 不过目前仅支持用网页…

Android调用相机拍照,展示拍摄的图片

调用相机&#xff08;隐式调用&#xff09; //自定义一个请求码 这里我设为10010int TAKE_PHOTO_REQUEST 10010;int RESULT_CANCELED 0;//定义取消码//触发监听&#xff0c;调用相机image_camera.setOnClickListener(new View.OnClickListener() {Overridepublic void onCli…

Network: use `--host` to expose

vite 启动项目提示 Network: use --host to expose 同事不能通过本地IP地址访问项目 解决方案&#xff1a;package.json中启动命令配置本地IP地址 vite --host 192.168.200.252