el-dialog关闭后表单数据缓存没清空【已解决】

2023-05-16

情景介绍

系统中有 新增修改 两个功能,共用一个对话框。
要求新增时对话框内容为空,修改时内容默认填充旧数据。
遇到的问题是,点击新增后内容填充了,关闭对话框再点击新增或者其他条目的修改,对话框内还是第一次打开的旧数据,没有清空。

分析问题

既然对话框数据没有清空,就看点击 新增 和 修改 两个按钮的函数是怎么写的。
首先对话框通过设置:visible.sync="open"控制是否弹出,然后通过ref="form"获取表单元素。
在这里插入图片描述
然后,新增按钮和修改按钮触发的函数如下:

/** 新增按钮操作 */
    handleAdd (row) {
      this.form.id = null
      this.open = true
      this.title = '新增词条'
      this.resetForm('form')
    },
    /** 修改按钮操作 */
    handleUpdate (row) {
      const url = `/api/focus/entry/detail/${row.id}`
      this.$http
        .get(url)
        .then((response) => {
          this.form.id = `${row.id}`
          this.open = true
          this.form = response.data
          this.form.keywordsTags = this.form.keywords.split('#*#')
          this.title = '修改词条'
          this.resetForm('form')
        })
        .catch()
    },

不管业务相关的内容,从功能上来说:

  1. 新增按钮,打开对话框,执行重置表单的操作。
  2. 修改按钮,获取当前行的数据,打开对话框并将数据填充到表单中,执行重置表单操作。

这个重置表单的操作就是关键了:

	resetForm (formName) {
      this.$nextTick(() => {
        var form = this.$refs[formName]
        form.resetFields()
      })
    },

其实就是通过resetFields()函数来初始化表单数据。这个函数的本质并不是清空表单,而是用初始值覆盖表单。 如果初始值是空,那么就能起到清空表单的效果。而这个初始值指的是对话框第一次渲染出来时的表单数据。

所以,如果先点击修改按钮,里面的数据被当成了初始值,之后每次打开对话框执行重置表单的操作都是将初始值填充到表单,也就出现数据缓存没清空的问题了。

解决方案

其实罪魁祸首就是修改按钮函数中,获取当前行的值并填充到表单的操作,现在只要让修改按钮函数的赋值操作,在表单渲染之后的一个执行周期就行了。使用$nextTick(),保证表单第一次渲染是空值。

/** 修改按钮操作 */
    handleUpdate (row) {
      const url = `/api/focus/entry/detail/${row.id}`
      this.$http
        .get(url)
        .then((response) => {
          this.form.id = `${row.id}`
          this.open = true
          this.$nextTick(() => {
            this.form = response.data
            this.form.keywordsTags = this.form.keywords.split('#*#')
            this.title = '修改词条'
          })
          this.resetForm('form')
        })
        .catch()
    },

优化

el-dialog 官方文档中提供了 close事件,关闭对话框执行的函数,这里将表单数据置空可以实现新增时手输数据不被缓存。

	clearForm () {
      this.form = Object.assign({}, {
        name: '',
        description: '',
        keywords: '',
        keywordsTags: []
      })

总结

我遇到的这个问题,是误解了 resetFields 函数的功能。注意这个函数是将表单重置为初始值,要确定好初始值是啥。

参考博客:https://blog.csdn.net/m0_67400973/article/details/123352141

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

el-dialog关闭后表单数据缓存没清空【已解决】 的相关文章

随机推荐

  • 树莓派无网线无显示器远程连接vnc

    配置wifi连接 方法非常简单 xff0c 首先在SD卡的根目录下添加一个名为 wpa supplicant conf的文件 xff0c 然后在该文件内添加以下的内容 xff1a ctrl interface span class toke
  • gazebo常见问题(1)

    项目场景 xff1a 用gazebo进行仿真 遇到问题ModelDatabase cc 340 问题描述 出现报错 Wrn ModelDatabase cc 340 Getting models from http gazebosim or
  • html调用php变量

    https jingyan baidu com article d45ad1485da89469552b80a5 html
  • 树莓派中python文件开机自启动方法

    1 打开cd etc rc local 2 在exit 0 前输入sudo python3 home pi test py amp 注意 xff1a python3路径取决于你的python路径 xff0c 比如我的是usr bin pyt
  • 宝塔npm警告:npm WARN config init.module Use `--init-module` instead.

    蓝奏云分享部分地区无法访问需手动修改www lanzous com变为 www lanzoux com gt Linux gt 宝塔npm警告 npm WARN config init module Use 96 init module 9
  • pyinstaller打包后找不到.pyc文件,例如:FileNotFoundError: [WinError 3] 系统找不到指定的路径。: ‘C:\\xx\\torch_utils.pyc‘

    使用pyinstaller打包python项目后 xff0c 运行dist里的 exe文件 xff0c 提示如下错误 说找不到utils文件夹里的torch utils pyc 原因分析 xff1a 我查看到项目里面有utils这个文件夹
  • Django中上传图片后,获得图片的网站的访问地址

    在Django中 xff0c 您可以通过使用Django自带的MEDIA URL和MEDIA ROOT设置来访问存储在media目录中的图像 这些设置定义了您的媒体文件的URL和文件系统路径 要访问存储在media images目录中的图像
  • 关于树莓派rc.local开机自启python文件失败的问题

    当我们在使用树莓派的rc local进行开机自启python文件时 xff0c 常常不能成功 xff0c 其中有一个原因 xff0c 特别常见 当我们查询rc local服务运行日志时 xff1a sudo systemctl status
  • 什么是串口通信协议

    ARM体系结构 串口通信 一 什么是串口通信 1 串口通信属于基层基本性的通信规约 xff0c 收发双方事先规定好通信参数 2 它自己本身不会去协商通信参数 xff0c 需要通信前通信双方事先约定好通信参数来进行通信 3 因此 xff0c
  • 利用MQTT协议与阿里云数据交互的python程序

    利用MQTT协议与阿里云数据交互的python程序 设计目的功能要求和关键问题环境配置问题本地程序如何连接云上设备云上的数据交互问题界面设计问题 阿里云相关操作本地程序 设计目的 设计开发一个py应用程序 xff0c 实现对阿里云数据的双向
  • 中文分词:隐马尔可夫-维特比算法(HMM-Viterbi)附源码

    目录 0 先验知识 1 什么是中文分词 2 数据集的构造 3 训练及预测过程简述 4 训练阶段 xff1a 统计隐马尔可夫模型的参数 5 预测阶段 xff1a 应用 Viterbi 算法 6 完整的 Python 实现代码 0 先验知识 有
  • python学习day1

    打印字 print haha 注释符 单行注释符 xxx 多行注释符 xxx xxx 34 34 定义变量 a 61 10 定义数字 b 61 haha ni hao 定义字符串 print a print b 赋值 b 61 a 用户交互
  • 系统学习-----firewalld概述

    动态防火墙后台服务程序 xff1a 提供一个动态管理的防火墙 xff0c 用以支持网络 Zone xff0c 来分配对一个网络链接和界面一定程序的信息 xff0c 它具备对IPv4和Ipv6防火墙设置的支持 它支持以太网桥 xff0c 并有
  • 系统学习----DHCP服务原理

    文章目录 DHCPDHCP优点DHCP相关概念DHCP租约更新DHCP运行过程 DHCP DHCP xff1a 动态主机设置协议 xff0c 是一个局域网协议 xff0c 使用UDP协议工作 主要有两个用途 xff1a 用于局域网或网络服务
  • 区块链技术及应用---区块链技术(一)

    文章目录 第一章 疯狂的比特币及其原理机制1 1 比特币诞生1 2 疯狂的比特币1 2 1 疯狂的价格1 2 2 疯狂的矿机和芯片 1 3 通俗地讲比特币机制1 4比特币交易1 5 比特币挖矿1 5 1 数学难题1 5 2 矿池原理 1 6
  • OpenFlow协议是什么

    为什么学习OpenFlow xff1f 实践SDN的首选主流南向接口协议P4和PISA的前身 OpenFlow起源 Ethane项目是OpenFlow的前身 集中式 主动式 xff0c 基于Flow控制2008年的Open Flow论文最初
  • OpenDaylight(ODL)学习笔记

    什么是OpenDaylight xff1f OpenDaylight是SDN开发及运行的一个平台 OpenDaylight架构特点 基于OSGi的模块化设计多南向协议 OpenFlow xff0c Netconf xff0c OVSDB 模
  • Vue / axios / props 调用后端接口数据并渲染到页面

    情景介绍 给了一个可视化大屏的代码 xff0c 代码上写的是假数据 现在要调用后端接口获取数据 xff0c 并将其渲染到页面上 分析问题 给的代码是一个 vue 组件嵌套一个子组件 xff0c 要把数据渲染到子组件上 要调用后端接口 xff
  • Element-ui关于el-icon无法正常显示的问题(已解决)

    在使用element ui组件库的时候 xff0c 使用自带的图标不显示 xff0c 查了好多篇博客 xff0c 都说是element ui的版本老了 xff0c 在package json中修改版本重新安装就行 xff0c 但是我的情况不
  • el-dialog关闭后表单数据缓存没清空【已解决】

    情景介绍 系统中有 新增 和 修改 两个功能 xff0c 共用一个对话框 要求新增时对话框内容为空 xff0c 修改时内容默认填充旧数据 遇到的问题是 xff0c 点击新增后内容填充了 xff0c 关闭对话框再点击新增或者其他条目的修改 x