【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>

下班~

目录
相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
287 2
|
29天前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
266 137
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
396 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
242 0
|
JavaScript 前端开发
模拟Vue数据的双向绑定
Vue的数据双向绑定功能一直为人称道, Vue数据的双向数据绑定主要依赖了Object.defineProperty,这里尝试用最简单的代码, 实现数据的双向绑定Demo MVVM ViewModel基本实现原理 Gi...
1159 2
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
746 0
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
984 4
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
795 77
|
7月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍