elementui表单的验证问题

这篇具有很好参考价值的文章主要介绍了elementui表单的验证问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

elementui表单的验证问题

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

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

elementui表单的验证问题,elementui,前端

​ 经过我的检查,发现主要原因就是我的新增和修改的对话框是用的同一个,而显示错误提示的都是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表单赋值时,它在页面上渲染出来的值。对应上我的操作流程,其实就是我第一次打开修改对话框时,从数据库里拿到的数据,只能说是白给。

elementui表单的验证问题,elementui,前端

​ 虽然白给了,但没有完全白给,官方的这段话其实已经给了答案,稍微调整一下代码。在调用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渲染后才能进行的操作。


​ 至此,问题彻底解决。

文章来源地址https://www.toymoban.com/news/detail-730461.html

到了这里,关于elementui表单的验证问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElementUI之增删改及表单验证

                                                             ⭐⭐ 本文章收录与ElementUI原创专栏 :ElementUI专栏                                      ⭐⭐   ElementUI的官网: ElementUI官网 目录 一.前言 二.使用ElementUI完成增删改         2.1 后台代码         2.2 前端代

    2024年02月07日
    浏览(38)
  • elementUi表单恢复至初始状态并不触发表单验证

    左侧是树形列表,右侧是显示节点的详情,点击+按钮应该就是新增一个规则的意思,表单内容是没有改变的,所以就把需要把表单恢复至初始状态并不触发表单验证 this.form是定义在Data里的form数据, this.$refs.form是el-form ref为form的表单

    2024年02月13日
    浏览(57)
  • 解决ElementUI动态表单校验验证不通过

    这里记录一下,写项目时遇到的一个问题:就是动态渲染的表单项,加验证规则后一直不通过!!! html部分:  js部分: 结果:   可以看到,按照官网的写法动态渲染的表单项是无法进行校验验证的。这里就是无论选中没选中值都校验 不通过。 修改prop、rules 结果:

    2024年02月12日
    浏览(41)
  • ElementUI实现增删改功能以及表单验证

    目录 前言 BookList.vue action.js 展示效果 本篇还是在之前的基础上,继续完善功能。上一篇完成了数据表格的查询,这一篇完善增删改,以及表单验证。    

    2024年02月07日
    浏览(45)
  • ElementUI--数据表格增删改查与表单验证

    1.1 后台CRUD编写 1.2 配置访问路径 src/api/action.js : 1.3 前端编写(及窗口) 注1:隐藏显示设置,通过Vue实例对象中的dialogFormVisible=\\\"true|false\\\"来控制dialog显示隐藏        :visible.sync=\\\"dialogFormVisible\\\"      注2:通过close或closed事件,在关闭dialog弹出框时清空form表单数据和验证信息

    2024年02月07日
    浏览(35)
  • vue+elementui表单数组对象深层嵌套之自定义验证规则

    需求场景:在Vue+Elementui项目中,需要在表单的循环数组中,对某一深层嵌套的对象属性制定自定义校验规则。

    2024年02月05日
    浏览(57)
  • vue3在table里使用elementUI的form表单验证

            常规情况下。rules和formItem是一对一的。例如下面的情况,判断表单内的测试1和测试2是否为空。         但是,如果在table中就按照常规的写法如下会发现不管如何输入或删除都将触发valid=false校验。如果在validator_isEmpty中打印value值会发现,value一直未undefined。

    2024年02月04日
    浏览(53)
  • 【项目经验】:elementui 表单问题

            1.在登录页面输入密码后浏览器保存密码,在下一次别的页面打开输入框会自动输入浏览器保存的密码。原因是浏览器会默认认为当前input的属性是password。         2.当form表单只有一个表单时回车提交表单问题         先设置input输入框的type属性为text; 然后获取

    2024年01月23日
    浏览(40)
  • elementui 表单 resetFields 方法不生效问题解决

    调用 elementui 官方提供的表单重置方法 resetFields 方法重置表单不生效,相信很多小伙伴都遇到过这个问题。 检查代码看每个 表单项的 prop 与 v-model 绑定的属性值命名是否相同 ,不相同的话就会导致 resetFields 方法不生效的问题,如果存在改正即可。

    2024年01月24日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包