VUE中讓由全局變量添加生成的新數組不隨全局變量的變化而變化


問題場景:

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)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM