vue3+element-plus 弹框表单重置(resetFields)失效、无效解决

4 篇文章 0 订阅

问题场景描述

需求:一个弹框同时实现新增、修改功能。点击修改时赋值到弹框里面的表单,点击新增弹框里面表单都是无值

问题:当进入页面先点击修改再点新增,弹框里面的值无法清空。而先点击新增再点修改则不会出现这个问题

分析:经过多方资料查找,得出结论:此问题的导致原因是与Form绑定的Model对象第一次赋值有关系
即在哪个阶段被赋值的,赋值的是什么,reset之后就会恢复成这个阶段赋值的内容

参考链接

解决方案

前置条件

  1. el-form一定要定义ref
    import { ref } from 'vue'
    const dataFormRef = ref()
    
    在这里插入图片描述
  2. el-form-item 必须有 prop属性,和v-model绑定的参数名要一致
    在这里插入图片描述

关键代码

  1. 弹框visible先为true

    	const visible = ref(false)
    	
    	const addOrUpdate = (row?: any)=>{
    		visible.value = true
    	}
    
  2. 引入nextTick

    	// 在nextTick里面赋值
    	const addOrUpdate = (row?: any)=>{
    		visible.value = true
    		 nextTick(() => {
                dataForm.visitorUserId = row.visitorUserId
                dataForm.mobile = row.mobile
                dataForm.certNo = row.certNo
                dataForm.validNum = row.validNum
                dataForm.validTime = row.validTime
            })
    	}
    
  3. 关闭弹框

    const closeDialog = () => {
        dataFormRef.value?.resetFields()
        dataForm.visitorUserId = ''
        // console.log("dataFormRef.value", dataFormRef.value);
        
        visible.value = false
    }
    
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3 中使用 Element Plus 进行表单验证可以按照以下步骤进行: 1. 安装 Element Plus 和 VeeValidate ``` npm install element-plus vee-validate@next ``` 2. 在 main.js 中引入 Element Plus 和 VeeValidate ```js import { createApp } from 'vue' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import { defineRule, ErrorMessage, configure } from 'vee-validate' import { required, min, max, email } from '@vee-validate/rules' import App from './App.vue' const app = createApp(App) app.use(ElementPlus) // 注册 VeeValidate 规则 defineRule('required', required) defineRule('min', min) defineRule('max', max) defineRule('email', email) // 配置 VeeValidate configure({ generateMessage: ({ field, rule }) => { const messages = { required: `${field}不能为空`, min: `${field}至少为${rule.params.min}个字符`, max: `${field}不能超过${rule.params.max}个字符`, email: `${field}必须是有效的邮箱地址` } return messages[rule.name] || `${field}无效` } }) app.component('ErrorMessage', ErrorMessage) app.mount('#app') ``` 3. 在组件中使用 VeeValidate ```html <template> <el-form :model="form" :rules="rules" ref="form"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> <error-message name="username"></error-message> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> <error-message name="password"></error-message> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> import { defineComponent } from 'vue' import { useVeeValidate } from '@vee-validate/vue3' export default defineComponent({ setup() { const { handleSubmit, resetForm, errors, setErrors } = useVeeValidate() const form = { username: '', password: '' } const rules = { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 6, max: 16, message: '用户名长度在 6 到 16 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 16, message: '密码长度在 6 到 16 个字符', trigger: 'blur' } ] } const submitForm = handleSubmit(async () => { // 提交表单逻辑 }) return { form, rules, submitForm, resetForm, errors, setErrors } } }) </script> ``` 在这个例子中,我们使用了 `useVeeValidate()` hook 来管理表单验证,定义了一个 `form` 对象来存储表单数据,定义了 `rules` 对象来定义表单验证规则,使用了 `handleSubmit()` 方法来触发表单提交逻辑,并且使用了 `ErrorMessage` 组件来展示错误信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值