vue物件拷貝,解決由於引用賦值修改原物件的方法

qq_41831968發表於2018-12-06

在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
     })
  }
 }
}

相關文章