elementui表单的验证问题

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渲染后才能进行的操作。


​ 至此,问题彻底解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Element UI 提供了一套强大的表单验证机制,可以帮助开发者快速实现表单验证功能。下面是一个简单的示例,演示如何使用 Element UI 进行表单验证: 首先,确保你已经安装了 Element UI,并在项目中正确引入了相关的样式和组件。 然后,在你的 Vue 组件中,使用 `<el-form>` 和 `<el-form-item>` 组件包裹你的表单元素,并在需要进行验证表单元素上添加 `prop` 属性指定该表单元素的唯一标识符。 接下来,通过添加规则对象,定义每个表单元素的验证规则。你可以通过 `rules` 属性传入一个对象,对象的键是表单元素的 `prop` 值,值是一个数组,数组中的每个对象表示一个验证规则。 最后,在提交表单时,可以通过调用 `<el-form>` 组件的 `validate` 方法来触发表单验证,如果验证通过,则执行相应的提交操作。 以下是一个示例代码: ```vue <template> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 3, max: 20, message: '用户名长度在 3 到 20 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 20, message: '密码长度在 6 到 20 个字符', trigger: 'blur' } ] } } }, methods: { submitForm() { this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过,执行提交操作 // ... } else { // 表单验证未通过 return false; } }); } } } </script> ``` 以上示例中,我们定义了一个包含用户名和密码的表单,为每个表单元素定义了相应的验证规则。在提交表单时,调用 `validate` 方法进行表单验证,如果验证通过,则可以执行提交操作。 这只是一个简单的示例,Element UI 还提供了更多的验证规则和自定义验证方法,可以根据具体需要进行配置。详细的文档可以参考 Element UI 官方文档中的表单验证部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛祖保佑永不宕机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值