vue物件拷貝,解決由於引用賦值修改原物件的方法
在vue專案中,遇到了一個問題,前端需要將後臺返回的資料展示在介面上,但是由於多了一個修改功能,點選修改按鈕會彈出一個彈框,彈框所有要修改的內容和之前展示的一樣,在彈框裡修改原來介面的值也會一起變化,這顯然不太合適(問題不好描述,直接上程式碼吧)
<!-- 展示的介面-->
<el-form-item label="手機號">
<el-input v-model="form.account"></el-input>
</el-form-item>
<!-- 修改的彈框-->
<el-dialog>
<el-form-item label="手機號">
<el-input v-model="form.account"></el-input>
<el-input v-model="newForm.account"></el-input>
</el-form-item>
</el-dialog>
export default {
data() {
return {
form: {},
newForm:{}
}
},
methods: {
request() {
//這裡是請求的方法,懶得寫了,因為返回的資料才是要處理的重點
this.$post('xxx/xxxx',params)
.then(res=>{
//將返回的資料直接賦值給form,然後直接在介面上展示
this.form = res;
//這時候問題就來了,因為彈框要修改的內容也是同樣的資料,如果使用同一個物件this.form,
//那麼在彈框裡修改的是同一個物件
//即使新建一個物件再用返回的資料給它賦值,結果也是相同的,因為物件的賦值是引用賦值
//this.newForm = res;
//解決方法其實挺簡單,Object.assign解決,
this.newForm = Object.assign({}, res)
//使用上面這個方法是完全複製了一個新的物件,即使修改這個newForm也不會影響form
})
}
}
}
相關文章
- 關於引用物件拷貝物件
- JavaScript 之物件拷貝與賦值JavaScript物件賦值
- Python - 物件賦值、淺拷貝、深拷貝的區別Python物件賦值
- vue物件的拷貝Vue物件
- vue的深度拷貝物件Vue物件
- JAVA 物件引用,以及物件賦值Java物件賦值
- js陣列物件複製拷貝不改變原來的值,深拷貝JS陣列物件
- 賦值、淺拷貝與深拷貝賦值
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- PHP 物件導向 - 物件的淺拷貝與深拷貝PHP物件
- 物件的深拷貝與淺拷貝物件
- 物件拷貝 - 優雅的解決方案 Mapstruct物件Struct
- 物件深拷貝和淺拷貝物件
- 物件拷貝方式物件
- Java拷貝物件Java物件
- JAVA 物件拷貝Java物件
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- 【JavaScript】物件的淺拷貝與深拷貝JavaScript物件
- 給物件引用變數賦值(轉)物件變數賦值
- 操作字元、物件方法, 深淺拷貝字元物件
- 實現物件淺拷貝、深拷貝物件
- 聊聊物件深拷貝和淺拷貝物件
- JavaScript中物件的拷貝JavaScript物件
- 淺析賦值、淺拷貝、深拷貝的區別賦值
- JavaScript物件的深拷貝以及淺拷貝分析JavaScript物件
- python 物件拷貝Python物件
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- 值物件與引用物件物件
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- 詳解js中物件的深淺拷貝JS物件
- JavaScript 中物件的深拷貝JavaScript物件
- 陣列和物件的拷貝陣列物件
- js資料型別賦值,淺拷貝,深拷貝JS資料型別賦值
- JavaScript 物件解構賦值JavaScript物件賦值
- map物件拷貝問題物件
- 詳解js中的物件的深淺拷貝JS物件
- 引用、淺拷貝及深拷貝 到 Map、Set(含物件assign、freeze方法、WeakMap、WeakSet及陣列map、reduce等等方法)物件陣列
- ES6 變數宣告與賦值:值傳遞、淺拷貝與深拷貝詳解變數賦值