Vue JS在一个数组中更改数据会发生变化

时间:2017-08-30 11:36:56

标签: javascript vue.js

我无法理解...想要这个vue! 如果可以的话请帮忙! 这是我的代码

var groupadding = new Vue({
el: '#groupAdd',
data:{
     currentFullData: [],
     localData: []
   },
   methods: {
     getDepartment() {
       var sendData = id; // this is example
       this.$http.post('some api ', sendData, {emulateJSON: true})
       .then( resp => {
         this.currentFullData = resp.data;    
       }
     },
     getLocalDepartment() {
     this.localData = this.currentFullData;
     }
   }
})
例如,在currentFullData中,我有4个布尔字段,'创建' ,'阅读','更新','删除'

这4个字段也获得了localData,但是当我更改了localData中的一些时,它们也改变了currentFullData !!!!!!!!!!!!!!!

soooooo任何人都可以解释我wtf是这个吗?!?!?!

2 个答案:

答案 0 :(得分:1)

这是因为您实际上正在修改同一个对象(就像您编写的this.localData = this.currentFullData;

如果要使用currentFullData初始化this.localData,则需要复制它:

this.localData = Object.assign({}, this.currentFullData);

请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

答案 1 :(得分:1)

感谢您的提问。问题不在于vue和数据值'currentFullData'和'localData'。由于您的数据变量是数组,因此当您分配像this.localData = this.currentFullData这样的值时,this.localData是指向this.currentFullData的指针。因此,当您更改localData时,currentFullData也会更改。 因此,为避免这种情况,请将this.currentFullData的引用传递给this.localData,如this.localData = this.currentFullData.slice()

要了解更多信息,请参阅this question about arrays on stackoverflow