elementui el-from el-table 点击新增按钮后如果不修改数据直接点击取消,table里的数据都会被清空

在用element-ui el-from el-table 组件时遇到一个问题:

点击新增按钮跳出dialong对话框后如果不修改数据直接点击取消,table里的数据都会被清空,而且data数据里的table数据也会被响应改变

然后再点击新增时还会出现原来清空的表单项里会同步出现from里输入的数据,点击新增后原来为空的数据又出现了,新增的也添加了。(说的比较乱)

原来的代码:

    <!-- 对话框 -->
        <el-dialog
            title="提示"
            :visible.sync="dialogVisible"
            :before-close="handleClose"
            width="45%"
        >
            <!-- 用户的表单信息 -->
            <el-form
                ref="form"
                :rules="rules"
                inline
                :model="form"
                label-width="70px"
            >
                <el-form-item label="姓名" prop="name">
                    <el-input
                        placeholder="请输入姓名"
                        v-model="form.name"
                    ></el-input>
                </el-form-item>
                <el-form-item label="年龄" prop="age">
                    <el-input
                        placeholder="请输入年龄"
                        v-model.number="form.age"
                    ></el-input>
                </el-form-item>
                <el-form-item label="性别" prop="sex">
                    <el-select v-model="form.sex" placeholder="请选择性别">
                        <el-option label="男" :value="1"></el-option>
                        <el-option label="女" :value="0"></el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="出生日期" prop="birth">
                    <el-col :span="11">
                        <el-date-picker
                            type="date"
                            placeholder="选择日期"
                            v-model="form.birth"
                            style="width: 100%"
                        ></el-date-picker>
                    </el-col>
                </el-form-item>
                <el-form-item label="地址" prop="addr">
                    <el-input v-model="form.addr"></el-input>
                </el-form-item>
            </el-form>
            <span slot="footer" class="dialog-footer">
                <el-button @click="cancle">取 消</el-button>
                <el-button type="primary" @click="submit"> 确 定 </el-button>
            </span>
        </el-dialog>
  //点击新增
        handleAdd() {
            this.modeType = 0
            this.dialogVisible = true
        },
 //编辑
        handleEdit(row) {
            console.log('row', row)

            this.modeType = 1
            this.dialogVisible = true
            //this.form = row
            
            this.$nextTick(function () {
                //注意需要对数据进行深拷贝,否则会出错
                this.form = row
                //this.form = JSON.parse(JSON.stringify(row))
            })
        },
//对话框关闭时的回调(点击×)
        handleClose() {
            //关闭对话框
            this.dialogVisible = false
            //清除from里的数据
            this.$refs.form.resetFields()
        },

原因: 如果直接将data数据给form的话,from保存data对象的逻辑地址,而这样就和其他使用data数据的地方保存方式一样,把from里的数据修改后,那些所引用data数据的地方也会改变

解决方法:

将对象进行深拷贝:改变保存的引用地址

 handleEdit(row) {
            console.log('row', row)

            this.modeType = 1
            this.dialogVisible = true
            //this.form = row
            
            this.$nextTick(function () {
                //注意需要对数据进行深拷贝,否则会出错
                this.form = JSON.parse(JSON.stringify(row))
            })
        },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值