【vue】vue2 数据回显取消编辑不修改原数据

简介: 【vue】vue2 数据回显取消编辑不修改原数据



项目中经常会遇到 回显当前行数据以供用户查看和编辑,很多时候编辑了数据但点击了 取消编辑,之前修改的数据全不算数,但已经修改了 模型数据,这个时候要 还原旧数据该怎么办? 深拷贝解决~

一、情景还原

点击详情出现详情页

点击编辑,对旧数据进行编辑

点击确定发送请求,修改数据库数据,点击取消编辑还原旧数据

二、实现思路

绑定的模型数据

data() {
    return {
      dialogVisible: false, // dialog隐藏与显示
      form: { input: "11111" }, // 需要回显的数据 | 旧数据
      inputcopy: {}, // 深拷贝旧数据 
      disabled: true,// 编辑与取消编辑 | input 禁用状态
    };
  },

template

通过三维运算符和绑定模型数据disabled实现切换编辑取消编辑注意:input输入框禁用状态也是绑定模型数据disabled,以达到同步效果

<template>
  <div class="test">
    <el-button plain @click="dialogVisible = true">详情</el-button>
    <el-dialog title="旧数据回显" :visible.sync="dialogVisible" width="30%">
      名称:
      <el-input
        v-model="form.input"
        placeholder="请输入内容"
        style="width: 200px"
        :disabled="disabled"
      ></el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editFn($event)">
          {{ disabled == false ? "取消编辑" : "编辑" }}</el-button
        >
        <el-button type="primary" @click="submitFn()"
          >确 定</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>

调用的方法

逻辑上:点击编辑模型数据变为false,可以对input输入框进行编辑,使用深拷贝把旧数据拷贝为inputcopy一下存起来>>>修改完数据后>>>用户点击确定,请求接口,修改数据库数据>>>用户没有点击确定而是取消编辑,把拷贝好的inputcopy重新赋值给原模型input,数据也就还原了

这里深拷贝我用的是Object.assign(),详细的看这里:Vue:Object.assign()的使用与深拷贝

methods: {
    submitFn(){
        this.dialogVisible = false
        // 请求接口...
    },
    editFn(e) {
      this.disabled = !this.disabled;
      if (e.target.innerText === "编辑") {
        this.inputcopy = Object.assign({}, this.form); // 原数据
        // ...
      } else {
        // 取消编辑,还原数据
        this.form = this.inputcopy;
        this.$set(this.form, this.inputcopy); // 更新模型数据
        // ...
      }
    },
  },

三、完整代码

<template>
  <div class="test">
    <el-button plain @click="dialogVisible = true">详情</el-button>
    <el-dialog title="旧数据回显" :visible.sync="dialogVisible" width="30%">
      名称:
      <el-input
        v-model="form.input"
        placeholder="请输入内容"
        style="width: 200px"
        :disabled="disabled"
      ></el-input>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editFn($event)">
          {{ disabled == false ? "取消编辑" : "编辑" }}</el-button
        >
        <el-button type="primary" @click="submitFn()"
          >确 定</el-button
        >
      </span>
    </el-dialog>
  </div>
</template>
<script>
export default {
  data() {
    return {
      dialogVisible: false, // dialog隐藏与显示
      form: { input: "11111" }, // 需要回显的数据 | 旧数据
      inputcopy: {}, // 深拷贝旧数据 
      disabled: true,// 编辑与取消编辑 | input 禁用状态
    };
  },
  methods: {
    submitFn(){
        this.dialogVisible = false
        // 请求接口...
    },
    editFn(e) {
      this.disabled = !this.disabled;
      if (e.target.innerText === "编辑") {
        this.inputcopy = Object.assign({}, this.form); // 原数据
        // ...
      } else {
        // 取消编辑,还原数据
        this.form = this.inputcopy;
        this.$set(this.form, this.inputcopy); // 更新模型数据
        // ...
      }
    },
  },
};
</script>
<style lang="scss" scoped></style>

下班~

目录
相关文章
|
4天前
|
缓存 监控 JavaScript
探讨优化Vue应用性能和加载速度的策略
【5月更文挑战第17天】本文探讨了优化Vue应用性能和加载速度的策略:1) 精简代码和组件拆分以减少冗余;2) 使用计算属性和侦听器、懒加载、预加载和预获取优化路由;3) 数据懒加载和防抖节流处理高频事件;4) 图片压缩和选择合适格式,使用CDN加速资源加载;5) 利用浏览器缓存和组件缓存提高效率;6) 使用Vue Devtools和性能分析工具监控及调试。通过这些方法,可提升用户在复杂应用中的体验。
14 0
|
3天前
|
JavaScript 开发工具 git
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
10 1
|
4天前
|
JavaScript 前端开发
vue(1),小白看完都会了
vue(1),小白看完都会了
|
4天前
|
JavaScript 数据库
ant design vue日期组件怎么清空 取消默认当天日期
ant design vue日期组件怎么清空 取消默认当天日期
|
4天前
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
9 0
|
4天前
|
JavaScript 前端开发 数据安全/隐私保护
揭秘Vue中v-model的内部工作机制
揭秘Vue中v-model的内部工作机制
|
4天前
|
JavaScript 前端开发 定位技术
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
Vue使用地图以及实现轨迹回放 附完整代码
|
4天前
|
JavaScript
Vue中避免滥用this去读取data中数据
Vue中避免滥用this去读取data中数据
|
4天前
|
JavaScript
vue中使用pinia及持久化
vue中使用pinia及持久化
7 0