当前位置: 首页 > 知识库问答 >
问题:

Vue将数据恢复到先前状态

龙景澄
2023-03-14

我有一个类似这样的JSON对象,

[
  {
    "column": {
      "name": "31_12_2021",
      "display_name": "31/12/2021",
      "default_value": "",
      "pk": true,
      "hidden": false,
      "data_type": "1"
    },
    "header_row": {
      "style": {}
    },
    "data_rows": [
      {
        "style": {}
      },
      {
        "style": {}
      }
    ]
  },
  {
    "column": {
      "name": "quick",
      "display_name": "quick",
      "default_value": "",
      "pk": false,
      "hidden": false,
      "data_type": "1"
    },
    "header_row": {
      "style": {}
    },
    "data_rows": [
      {
        "style": {}
      },
      {
        "style": {}
      }
    ]
  },
  {
    "column": {
      "name": "333",
      "display_name": "333",
      "default_value": "",
      "pk": false,
      "hidden": false,
      "data_type": "1"
    },
    "header_row": {
      "style": {}
    },
    "data_rows": [
      {
        "style": {}
      },
      {
        "style": {}
      }
    ]
  }
]

我正在我的vue模板中循环使用这个来创建一个选择菜单,

<div v-for="(c, i) in columns" :key="i">
  <select v-model="c.column.data_type">
    <option value="1">Data Type 1</option>
    <option value="2">Data Type 2</option>
    <option value="3">Data Type 3</option>
    <option value="4">Data Type 4</option>
  </select>
</div>

通过将select绑定到data_type,每次我进行select更改时,它都会更新数据/json中该对象的数据。我想知道的是,是否可以在更改之前获取旧值?

我试着做了一些事情,

watch: {
    columns: {
      deep: true,
      handler(newValue, oldValue) {
        //do some comparions here
     }
    }
}

但是,新值和旧值似乎是相同的?

共有2个答案

嵇昱
2023-03-14

正如文件中提到的

注意:当改变(而不是替换)对象或数组时,旧值将与新值相同,因为它们引用相同的对象/数组。Vue不保留预变异值的副本。

规避这一挑战的一种可能方法是使用@Shoejep的解决方案

刘嘉木
2023-03-14

如果您只想查看一个属性是否发生了更改,那么最好在select中使用< code>@input事件。我在下面提供了一个工作片段,展示了如何获取新旧值。

Vue.config.productionTip = false;
Vue.config.devtools = false;

new Vue({
  el: "#app",
  data: () => {
    return {
      columns: [{
        "column": {
          "name": "31_12_2021",
          "display_name": "31/12/2021",
          "default_value": "",
          "pk": true,
          "hidden": false,
          "data_type": "1"
        },
        "header_row": {
          "style": {}
        },
        "data_rows": [{
          "style": {}
        }, {
          "style": {}
        }]
      }, {
        "column": {
          "name": "quick",
          "display_name": "quick",
          "default_value": "",
          "pk": false,
          "hidden": false,
          "data_type": "1"
        },
        "header_row": {
          "style": {}
        },
        "data_rows": [{
          "style": {}
        }, {
          "style": {}
        }]
      }, {
        "column": {
          "name": "333",
          "display_name": "333",
          "default_value": "",
          "pk": false,
          "hidden": false,
          "data_type": "1"
        },
        "header_row": {
          "style": {}
        },
        "data_rows": [{
          "style": {

          }
        }, {
          "style": {

          }
        }]
      }]
    }
  },
  methods: {
    onDataTypeChange: function(oldValue, newValue) {
      alert("Changed from " + oldValue + " to " + newValue);
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <div v-for="(c, i) in columns" :key="i">
    <select v-model="c.column.data_type" @input="onDataTypeChange(c.column.data_type, $event.target.value)">
      <option value="1">Data Type 1</option>
      <option value="2">Data Type 2</option>
      <option value="3">Data Type 3</option>
      <option value="4">Data Type 4</option>
    </select>
  </div>
</div>
 类似资料:
  • 问题内容: 我是自动化测试和dbUnit的新手。因此,感谢您的建议。 我将创建一个测试套件,它将以以下方式运行: 创建一个内存中的H2数据库 运行DDL脚本以创建表 运行dbUnit来插入将被所有测试使用的初始数据(我们称其为 STATE0 )。 运行测试 到那里对我来说看起来不错,但是我不明白,是在测试运行并更改数据后如何将数据库还原为 STATE0 ? 我可以使用dbUnit吗? 还是其他?

  • 本文向大家介绍vue将data恢复到初始状态 && 重新渲染组件实例,包括了vue将data恢复到初始状态 && 重新渲染组件实例的使用技巧和注意事项,需要的朋友参考一下 1. 将data恢复到初始状态 Object.assign(this.$data, this.$options.data()) // 初始化data 这里的 this.$options.data() 作为源对象, this.$d

  • 概述 Sublime Text 可以通过删除 data 文件夹的方式恢复到初始状态。不同操作系统这个文件夹的位置也不同: OS X:~/Library/Application Support/Sublime Text 3 Windows:%APPDATA%\Sublime Text 3 Linux:~/.config/sublime-text-3 恢复到初始状态,你需要: 退出 Sublime T

  • 问题内容: 如果我做 我可以看到所有可用的软件包。 我今天早上将其更新为最新版本,但是现在我需要恢复到以前的版本。我试过了 但这没用。如何指定要使用的版本? 问题答案: 我不得不改用该函数:

  • 我正在做一个练习题,练习它 这个问题基本上是在PriorityQueue和某个k中传递,然后返回该PriorityQueue中的第k个最小值。您还需要将PriorityQueue恢复到其初始状态,并可以使用一个堆栈或队列作为辅助数据结构。 我的更高层次的伪思想是,因为PriorityQueue已经充当了最小堆,从JavaPriorityQueue,我真正要做的(我的算法)是: > 从Priorit

  • 我有一些自动测试,可以插入一些数据,并将其保存到Oracle XE数据库,版本11g。目前,测试完成后,通过SQL手动删除数据。但是我想知道有没有其他方法可以使回滚更容易,更有效?我正在阅读关于恢复点,想知道这是我正在寻找的功能吗? 恢复的过程会消耗多少内存?使用它来满足我的需要是一种良好的做法吗?或者它可能是回滚数据插入的其他方式吗? 谢谢