問題場景:

const addOptions = {
singleOrComplex,
totalNum: this.smallTotalPrice,
selectList: this.purchaseLotter,
smallTotalPrice: this.smallTotalPrice * 2
}
this.selectSucLotter.push(addOptions)
addOptions中的紅框內容為全局的變量,我們需要往this.selectSucLotter中添加addOptions,且需要this.selectSucLotter中的值不隨着addOptions中紅框內的變量改變而改變。如果我們直接寫this.selectSucLotter.push(addOptions),此時當我們修改紅框中的內容時,this.selectSucLotter的值也會隨之發生改變。解決之前大家先來看一下Vue實現對數組、對象的深拷貝、復制
當組件間傳遞對象時,由於此對象的引用類型指向的都是一個地址(除了基本類型跟null,對象之間的賦值,只是將地址指向同一個,而不是真正意義上的拷貝),如下
數組: var a = [1,2,3]; var b = a; b.push(4); // b中添加了一個4 alert(a); // a變成了[1,2,3,4]
對象:
var obj = {a:10};
var obj2 = obj;
obj2.a = 20; // obj2.a改變了,
alert(obj.a); // 20,obj的a跟着改變
這就是由於對象類型直接賦值,只是將引用指向同一個地址,導致修改了obj會導致obj2也被修改
所以在vue中,如果多個組件引用了同一個對象作為數據,那么當其中一個組件改動對象數據時,其他對象的數據也會同步改動。
解決方法:
let addOptions = {
singleOrComplex,
totalNum: this.smallTotalPrice,
selectList: this.purchaseLotter,
smallTotalPrice: this.smallTotalPrice * 2
}
addOptions = JSON.parse(JSON.stringify(addOptions))
this.selectSucLotter.push(addOptions)
