最近剛接觸vue的項目,今天發現頁面上有一個問題 就是 頁面中有一個表格,點擊表格中的修改,彈出來一個修改框可以修改數據,但是現在問題是,在彈出框對其進行修改的時候,列表中對應的數據也在實時的變動。我想要的效果是,當我保存的時候時候,在使列表數據更改,而不是輸入框一邊更改,這個問題剛開始時沒有發現 ,是公司測試的同事給提出來的
之前的代碼是點擊修改的時候 直接復制的選中的那條記錄,剛開始一致以為是列表中的字段和 dialog中的字段名稱一樣導致的,雖然按照這個方案可以解決這兩個地方雙向綁定的問題,但是修改起來工作量比較大,需要調整字段和數據庫中的對應關系。后來把問題發給我媳婦兒看了看 (媳婦是做前端的),他丟給我一段話: 在每次彈出對話框的時候深拷貝一次當前行數據的副本,form = JSON.parse(JSON.stringify(row))
完成提交后要么重新刷新數據源,要么將form的數據更新到row,問題解決。
那么深拷貝和淺拷貝的區別是什么呢?通過查詢有關資料總結如下:
淺拷貝(shallowCopy)只是增加了一個指針指向已存在的內存地址,
深拷貝(deepCopy)是增加了一個指針並且申請了一個新的內存,使這個增加的指針指向這個新的內存,
使用深拷貝的情況下,釋放內存的時候不會因為出現淺拷貝時釋放同一個內存的錯誤。
淺復制:僅僅是指向被復制的內存地址,如果原地址發生改變,那么淺復制出來的對象也會相應的改變。
深復制:在計算機中開辟一塊新的內存地址用於存放復制的對象。