elmentui表单重置初始值问题与解决方法

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

背景

在做管理台项目时,我们会经常使用到表单+表格+弹窗表单的组合,以完成对数据的增、删、查、改

  • 在vue2+elementui项目中,使用弹窗dialog+表单form,实现对数据的添加和修改。
  • 每次关闭弹窗时,使用resetFields方法对表单进行重置。
  • 下一次打开弹窗时,
    • 如果是添加数据,那么会呈现空的表单。
    • 如果是修改数据,那么表单上已预填好了数据。

很多小伙伴可能会遇到表单重置的初始值问题,如图。

elmentui表单重置初始值问题与解决方法

问题具体描述为:每次关闭弹窗时,表单不是重置为我们设置的空数据,而是重置为在该页面上第一次打开弹窗时表单的数据

这意味着,如果我们进入页面后第一次打开的是修改弹窗,那么以后每次表单重置的数据都是最开始打开的那个修改弹窗表单的初始数据

原因

让我们看下代码:

<template>
    <div>
        <!-- 添加 -->
        <el-button @click="handleAdd">添加</el-button>

        <!-- 表格 -->
        <el-table :data="tableData" style="width: 800px">
            <el-table-column prop="id" label="id" width="180" align="center" />
            <el-table-column prop="name" label="名称" width="180" align="center" />
            <el-table-column label="操作" align="center">
                <template v-slot="{ row }">
                    <el-button @click="handleEdit(row)">修改</el-button>
                </template>
            </el-table-column>
        </el-table>

        <!-- 弹窗 -->
        <el-dialog title="添加/修改" :visible.sync="dialogVisible" width="30%" :before-close="handleClose" center>
            <template>
                <div>
                    <el-form ref="form" :model="formData">
                        <el-form-item prop="name" label="名称">
                            <el-input v-model="formData.name"></el-input>
                        </el-form-item>
                        <el-form-item prop="id" label="id">
                            <el-input v-model="formData.id"></el-input>
                        </el-form-item>
                    </el-form>
                </div>
            </template>
            <template #footer>
                <el-button type="primary">确定</el-button>
                <el-button type="info">取消</el-button>
            </template>
        </el-dialog>
    </div>
</template>

<script>
export default {
    name: 'formInitial',
    data() {
        return {
            tableData: [
                { id: 1, name: '王小虎' },
                { id: 2, name: '刘小白' },
                { id: 3, name: '张晓来' },
            ],
            formData: {
                name: '',
                id: '',
            },
            dialogVisible: false,
        };
    },
    methods: {
        // 添加
        handleAdd() {
            this.dialogVisible = true;
        },
        // 编辑  !!! 问题所在 !!!
        handleEdit(row) {
            // 给表单赋初值
            this.formData.name = row.name;
            this.formData.id = row.id;
            // 打开弹窗
            this.dialogVisible = true;
        },
        // 弹窗关闭
        handleClose() {
            // 初始数据
            this.$refs.form.resetFields();
            // 关闭弹窗
            this.dialogVisible = false;
        }
    },
};
</script>

这里我们重点关注handleEdit() 这个方法。

表面上看并没有什么问题,每次点击修改,打开弹窗前,表单赋初值。

这里就不跟大伙儿卖关子了,原因:

  • 一开始弹窗隐藏时,弹窗样式加上了display: none 属性。
  • display: none 属性的作用:将元素从DOM结构中完全移除。
  • 而表单是放在弹窗里的,意味着表单一开始不会出现在页面结构中,此时data 中的默认数据formData 并没有作用上表单。
  • 当点击修改时,触发handleEdit() 方法,修改了formData 。此时弹窗打开,新的formData 作用上表单,并且表单将新的formData当作了初始数据

解决

解决思路很简单,就是想办法让表单吃上原始的formData

原来是先赋数据,再打开弹窗。那么现在改为先打开弹窗,再赋数据。

只需要修改handleEdit()方法:

// 编辑
handleEdit(row) {
    // 打开弹窗
    this.dialogVisible = true;
    // 等到下次DOM渲染完成,即弹窗完全显示后执行
    this.$nextTick(() => {
        // 给表单赋初值
        this.formData.name = row.name;
        this.formData.id = row.id;
    });
},

这里用到this.$nextTick() ,是为了保证赋值是发生在弹窗打开后,所以弹窗打开的那一刻,表单使用的还是最初data中的formData ,并将其作为表单初始值。

elmentui表单重置初始值问题与解决方法文章来源地址https://www.toymoban.com/news/detail-710050.html

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

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

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

相关文章

  • vue element ui重置表单的方法

    element代码部分 rest(form) 里面的form是表单的名字 vue代码部分 重点 使用方式 在按钮里面嗲用**rest(表单名称)**方法进行重置表单

    2024年02月08日
    浏览(30)
  • Element ui 重置表单resetField()方法不生效

     Element ui在重置表单时需要特别注意 非弹窗情况下 1.指定表单的ref是否正确  2.确定重置的表单的el-form-item/el-form-item是否设置了prop属性(多数是因为忽略了这一步) 例如:我们需要清空当前的登陆表单 弹窗情况下 场景:比如我们需要做一个新增和修改的弹窗,相信各位前

    2024年01月18日
    浏览(31)
  • Access自动编号的初始值设置及重置编号问题

    在做ASP网站的注册会员功能,希望实现一个 用户在注册后数据库把新加入记录的自动编号ID反馈给用户,用户会得到这个ID号(像QQ号一样),作为用户的独有账户名。 发现ID是从“1”开始的。这未免有点太不靠谱:一个用户注册完会员,得到一个“1”作为账号,呵呵,太可笑

    2024年02月07日
    浏览(25)
  • elementUI 表单数据的校验回显在关闭之后没有重置,再次打开表单之后还显示校验信息(重置表单 element-ui的resetFields()方法不生效)

    问题现象: 因为和修改用的同一个vue页面,所以只要点开修改之后,直接点击添加,就会显示校验的提示信息,也就是表单信息没有重置   解决方法: 解决方法一:在关闭弹框的地方或者需要重置的地方调用: 截图实例:  下面是userInfo的具体展现   解决方法二:如果上面

    2024年02月15日
    浏览(43)
  • elementui 表单 resetFields 方法不生效问题解决

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

    2024年01月24日
    浏览(26)
  • 有时出厂重置BIOS是解决电脑问题和保持其最佳性能的好办法,主要有两种方法

    ​BIOS是计算机开机时启动的第一个程序,它有助于执行一些基本的计算机操作,并管理计算机和安装在计算机上的操作系统之间的命令。与任何其他程序一样,如果在启动计算机时遇到问题或在计算机中添加了新硬件,则可能需要将BIOS重置为出厂设置。这样做意味着所有B

    2024年02月04日
    浏览(38)
  • Vue3+Element Plus 关于Dialog弹出Form表单,使用resetFields重置无效的解决

    主要参考了element-plus官方的表单重置按钮(官方Form例子任意reset按钮),然后试了试他的ref绑定,发现可以完美解决重置问题。 第一步:给Form表单绑定ref。绑定ref 的值为refFormInstance();这里注意表单el-form-item必须有prop属性。 2.第二步:在你想要重置的地方调用重置表单方法

    2024年01月21日
    浏览(33)
  • 路由器LSP设置丢失、初始密码和上网掉线等一系列问题解决方法介绍

    本篇介绍华为路由器在设置LSP时,所要注意到的一些问题,建立LSP后如何撤销会话和环路检测,使用无线路由器时,经常出现建立LSP丢失等问题,还有初始密码设置问题以及上网经常掉线等问题。 一、LDP通过检测会话连接上传输的LDPPDU来判断会话的完整性 ,LSR为每个会话建

    2024年02月06日
    浏览(29)
  • ChatGPT:概述Vue.js中data函数初始化和created钩子函数调用的顺序和问题解决方法

    我将输入一段Vue代码,请你记住: ChatGPT: 你提供的代码是一个Vue.js组件中的 data 和 created 部分。这部分代码包含了组件的数据和生命周期钩子函数。 在 data 中,你定义了一些数据属性,包括查询信息、分页信息、总记录数、表格数据以及一些表单相关的数据和控制属性。

    2024年02月09日
    浏览(37)
  • vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】

    文章内容 文章链接 Form表单 提交和校验 https://blog.csdn.net/XSL_HR/article/details/128495087?spm=1001.2014.3001.5501 Form表单的 嵌套使用 https://blog.csdn.net/XSL_HR/article/details/128488913?spm=1001.2014.3001.5501 Form表单的 动态校验规则 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 From表单的

    2024年02月02日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包