Vue Element UI 表单弹窗重置标题办理方案 —— 每次打开都初始化,告别残 ...

打印 上一主题 下一主题

主题 1635|帖子 1635|积分 4905

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Vue Element UI 表单弹窗重置标题办理方案 —— 每次打开都初始化,告别残留提示!

媒介

在利用 Vue + Element UI 开发后台管理系统时,我们经常会用到 el-dialog 弹出表单对话框来完成用户输入操纵。然而,很多开发者都会碰到一个常见标题:
   当第一次提交未填写内容触发校验失败后,关闭对话框再次打开时,依然显示之前的错误提示,且输入框中可能还保存前次的输入内容!
  这不仅影响用户体验,也轻易让用户产生狐疑。那么,如何实现每次打开对话框时都举行“彻底初始化”,让表单回到初始状态呢?
本文将带你一步步办理这个标题,并提供完整、可直接复用的高质量代码示例。
标题描述

以下是一个典型的 el-dialog + el-form 表单结构:
  1. <el-dialog :title="title" :visible.sync="dialog1" width="480px" append-to-body>
  2.   <el-form :model="refuseForm" ref="refuseForm" :rules="rules" label-width="110px">
  3.     <el-form-item label="原因" prop="refuseReason">
  4.       <el-input
  5.         type="textarea"
  6.         :autosize="{ minRows: 7, maxRows: 15}"
  7.         placeholder="请输入内容"
  8.         maxlength="800"
  9.         show-word-limit
  10.         v-model="refuseForm.refuseReason"
  11.       ></el-input>
  12.     </el-form-item>
  13.   </el-form>
  14. </el-dialog>
复制代码
出现的标题:



  • 第一次未填写内容点击提交,触发赤色提示:“请输入缘故原由”。
  • 关闭弹窗后再次打开,仍显示之前的错误提示。
  • 输入框中的值没有被清空。
办理思路

Element UI 提供了两个非常实用的方法用于表单控制:
方法名作用resetFields()打扫全部验证信息,并将表单字段重置为初始值clearValidate()仅打扫验证提示,不重置表单数据 因此,我们的目标是:在每次打开弹窗前调用 resetFields() 方法,确保表单规复初始状态
实现方案(Vue + Element UI)

步骤一:监听 el-dialog 的 open 变乱

我们可以利用 @open="handleOpen" 监听弹窗打开变乱,在弹窗即将显示时执行初始化逻辑。
步骤二:利用 $nextTick 确保 DOM 更新完毕

由于 Vue 是异步更新 DOM 的,我们需要等待 DOM 完全渲染后再调用 resetFields()。
终极代码如下:

  1. <template>
  2.   <el-dialog
  3.     :title="title"
  4.     :visible.sync="dialog1"
  5.     width="480px"
  6.     append-to-body
  7.     @open="handleOpen"
  8.   >
  9.     <el-form
  10.       :model="refuseForm"
  11.       ref="refuseForm"
  12.       :rules="rules"
  13.       label-width="110px"
  14.     >
  15.       <el-form-item label="原因" prop="refuseReason">
  16.         <el-input
  17.           type="textarea"
  18.           :autosize="{ minRows: 7, maxRows: 15}"
  19.           placeholder="请输入内容"
  20.           maxlength="800"
  21.           show-word-limit
  22.           v-model="refuseForm.refuseReason"
  23.         ></el-input>
  24.       </el-form-item>
  25.     </el-form>
  26.     <div slot="footer" class="dialog-footer">
  27.       <el-button type="primary" @click="submitRefuseForm">确 定</el-button>
  28.       <el-button @click="dialog1 = false">取 消</el-button>
  29.     </div>
  30.   </el-dialog>
  31. </template>
  32. <script>
  33. export default {
  34.   data() {
  35.     return {
  36.       title: '拒绝原因',
  37.       dialog1: false,
  38.       refuseForm: {
  39.         refuseReason: ''
  40.       },
  41.       rules: {
  42.         refuseReason: [
  43.           { required: true, message: '请输入原因', trigger: 'blur' },
  44.           { min: 1, max: 800, message: '长度在1到800个字符', trigger: 'blur' }
  45.         ]
  46.       }
  47.     };
  48.   },
  49.   methods: {
  50.     // 弹窗打开时触发
  51.     handleOpen() {
  52.       this.$nextTick(() => {
  53.         this.$refs.refuseForm.resetFields();
  54.       });
  55.     },
  56.     // 提交表单
  57.     submitRefuseForm() {
  58.       this.$refs.refuseForm.validate(valid => {
  59.         if (valid) {
  60.           console.log('提交成功:', this.refuseForm);
  61.           this.dialog1 = false;
  62.           this.$refs.refuseForm.resetFields(); // 可选:提交后也清空
  63.         } else {
  64.           console.log('校验失败');
  65.           return false;
  66.         }
  67.       });
  68.     }
  69.   }
  70. };
  71. </script>
复制代码
效果展示

每次打开弹窗:


  • 表单内容清空;
  • 错误提示消失;
  • 光标不在文本框内;
  • 用户可以重新开始输入。
小结与建议

本事说明@open="handleOpen"在弹窗打开时触发初始化this.$nextTick()等待 DOM 渲染完成再调用方法resetFields()清空输入 + 打扫校验提示clearValidate()仅打扫校验提示,适合保存输入内容场景 通过这篇文章,你应该已经掌握了如安在 Vue + Element UI 中优雅地处理弹窗表单的初始化标题。这个本事固然简朴,但在现实开发中非常实用,能大大提升用户体验和代码质量。
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、转发,也可以留言讨论你的想法或提出改进建议!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表