我想做的是在更改之前保存一个值。
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
也是如此。我不希望这种情况发生。
答案 0 :(得分:0)
我认为这是正在发生的事,您正在引用results
到noneChangedResults
,所以当第一个更改时,最后一个也更改,因为它是对第一个对象的引用。
要解决此问题并为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.results
在this.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));
}