ElementUI中的resetFields方法

需求

点击按钮弹出修改的对话框

出现的bug

在点开一个按钮之后,不做操作,关闭对话框,再点开另一个按钮,发现这一行的数据被改变了

具体如下

在这里插入图片描述

造成的原因

原因一:我在给弹出的对话框中赋值时,是浅拷贝,导致对话框中的数据源与table中的数据源是同一个数据源,修改对话框中的数据就是修改table中的数据
原因二:resetFields仅仅是将字段重置为初始值,并不是将数据清除。上图中第一次绑定的数据是1,所以表单的初始数据就是1,在第二次点击又关闭时,会触发resetFields方法,将对话框中的数据重置为初始值1,又因为是浅拷贝,所以会影响表格中的数据

官网介绍

这里可以看见是不是将数据清空,是初始值
在这里插入图片描述

解决方法(待定)

方法一: 使用 this.$nextTick

https://blog.csdn.net/gujian_peachblossom/article/details/117254326

方法二:仅仅拷贝值

this.editForm.username = tableData.username

完整代码,可直接赋值运行

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.4.5/theme-chalk/index.css">
</head>

<body>
    <div id="id">

        <h1>使用template调用函数</h1>
        <el-table :data="userList" border style="width: 100%">
            <el-table-column prop="username" label="姓名" width="180"></el-table-column>
            <!-- 删除改良操作 -->
            <el-table-column label="操作" width="190">
                <template scope="scope">
                    <el-button type="primary" @click="showEditUser(scope.row)" size="mini">点击修改</el-button>
                </template>
            </el-table-column>
        </el-table>

        <!-- 虚假的对话框 -->
        <el-dialog title="修改用户信息" :visible.sync="dialogEditUserVisible" width="50%" @close="closeEditDialog">
            <el-form :model="editForm" ref="editUserFormRef" label-width="70px" class="demo-ruleForm">
                <el-form-item label="用户名" prop="username">
                    <el-input v-model="editForm.username"></el-input>
                </el-form-item>
            </el-form>

            <span slot="footer" class="dialog-footer">
                <el-button @click="dialogEditUserVisible = false">取 消</el-button>
                <el-button type="primary" @click="dialogEditUserVisible = false">确 定</el-button>
            </span>
        </el-dialog>
    </div>

</body>


<!-- 2.5.2 -->
<!-- <script src="https://cdn.staticfile.org/vue/2.5.2/vue.js"></script> -->
<script src="https://cdn.staticfile.org/vue/2.6.11/vue.js"></script>

<script src="https://cdn.staticfile.org/element-ui/2.4.5/index.js"></script>

<script>
    new Vue({
        el: '#id',

        data() {
            return {
                userList: [{ username: 1 }, { username: 2 }, { username: 3 }, { username: 4 }, { username: 5 },],
                editForm: {},
                dialogEditUserVisible: false
            };
        },

        methods: {
            showEditUser(tableData) {
                console.log(tableData);
                // 这里是一个浅拷贝
                this.editForm = tableData
                this.dialogEditUserVisible = true
            },
            // 错误根源
            closeEditDialog() { 

                // 就是因为是浅拷贝,所以this.editForm 与 tableData指向的是同一个对象,所以修改this.editForm就是在修改tableData指向的对象, 而tableData是通过tamplate中的方法传递过来的,所以tableData指向的数据其实是table中的数据
                // 所以table中的数据才会改变

                this.$refs.editUserFormRef.resetFields()
            },

        },

    })
</script>

</html>
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
resetFields和resetFieldVue.js表单验证的两个方法,它们的区别如下: 1. resetFields()方法用于重置整个表单的验证状态和输入值。调用resetFields()方法后,表单的所有输入框的值都将被清空,并且验证状态会被重置为初始状态。这个方法没有参数,它会对表单的所有字段生效。 2. resetField()方法用于重置指定字段的验证状态和输入值。调用resetField(fieldName)方法可以清空指定字段的值,并将其验证状态重置为初始状态。这个方法需要传入字段名作为参数,只会对指定的字段生效。 所以,resetFields()方法是重置整个表单的验证状态和输入值,而resetField()方法则是重置单个字段的验证状态和输入值。具体使用哪个方法取决于你想要重置整个表单还是只重置某个特定字段。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈vueresetFields()使用注意事项](https://download.csdn.net/download/weixin_38665093/12924160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [clearValidate和resetFields的区别](https://blog.csdn.net/zhaozhao_888/article/details/120970577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [clearValidate()与 resetFields()的区别](https://blog.csdn.net/fxinn/article/details/116594718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值