设置已安装的变量,但设置完后不会更改

时间:2018-07-26 13:36:25

标签: vuejs2

我想做的是在更改之前保存一个值。

mounted () {
    this.noneChangedResults = this.results;
  }

这样我就可以做到。

methods: {
    saveChanges(){
      this.$router.push({ name: "resultsAfterEdit", params: {newResults: this.results}});
    },
    exit(){
      console.log(this.noneChangedResults);
      this.$router.push({ name: "resultsAfterEdit", params: {newResults: this.noneChangedResults}});
    }
  },

这样做是为了避免在退出时(调用exit()时)保存新结果

this.results通过v模型进行操作

更改this.results之后的

this.noneChangedResults也是如此。我不希望这种情况发生。

3 个答案:

答案 0 :(得分:0)

我认为这是正在发生的事,您正在引用resultsnoneChangedResults,所以当第一个更改时,最后一个也更改,因为它是对第一个对象的引用。

要解决此问题并为noneChangedResults赋予数据唯一所有权,只需使用Spread Operator

可能的解决方案:

mounted () {
    this.noneChangedResults = {...this.results};
}

示例查看控制台; D

// Without spread operator

a = {}
console.log('a', a)
b = {}
console.log('b', b)
b.c = 3
console.log('b', b)
a = b
console.log('a', a)
b.d = 4
console.log('b', b)
console.log('a', a)

// With spread operator

a = {}
console.log('a', a)
b = {}
console.log('b', b)
b.c = 3
console.log('b', b)
a = {...b}
console.log('a', a)
b.d = 4
console.log('b', b)
console.log('a', a)

答案 1 :(得分:0)

您需要使用this.resultsthis.noneChangedResults中克隆Object.assign

this.noneChangedResults = Object.assign({}, this.results)

简单地将一个对象分配给另一个对象将反映对第一个对象的更改:

let a = {a: 1}

let b = a

b.a = 2

console.log(a) // Output: {a: 2}

但是使用Object.assign将复制第一个对象,因此对第二个对象的更改不会影响第一个对象:

let a = {a: 1}

let b = Object.assign({}, a)

b.a = 2

console.log(a) // Output: {a: 1}

答案 2 :(得分:0)

这里发生的是对象this.noneChangedResults仅引用了另一个对象this.results

一个简单的解决方法是:

  mounted () {
    this.noneChangedResults = JSON.parse(JSON.stringify(this.results));
  }