我在我的Vue项目中使用Vue.Draggable,并试图从sider拖动(克隆)一个按钮到一个可拖动的组件中。
当我将按钮克隆到组件中时,我想修改数据。但我发现,当我修改与组件绑定的列表中的数据时,sider使用的原始列表会自动更改。
在Vue.Draggable中有没有某种同步机制?我只想更改组件中的对象数据。
我尝试使用Chrome浏览器中的vue扩展来手动修改list2中的对象。而且这种情况仍然会发生。所以我认为这可能不是我代码中的bug。
addEntity (conditionID, entity) {
if (!entity.forChoose) {
}
else {
let variable = 0;
for (let i = 0, len = this.whens.length; i < len; i++) {
if (this.whens[i].entity[0].id == entity.id) {
variable++;
}
}
this.whens[conditionID].entity[0].forChoose = false;
this.whens[conditionID].entity[0].variable = variable;
this.whens[conditionID].entity[0].name = entity.name + '-fake';
}
},
上面的代码是当我将数据拖到组件中,并更改了一些变量时的事件。
虽然我没有对从中克隆数据的Sider中的原始数据做任何操作,但它仍然发生了更改。
有没有办法在不影响原始数据的情况下改变拖拽的数据?请帮帮我,谢谢!
发布于 2019-11-07 21:24:16
我认为这是因为它的不变性。因此,在更改列表之前,您是否可以尝试使用扩展运算符来创建列表的新浅层副本。
如何使用扩展运算符(三点)
让newArrayOfWhens = ...this.whens
然后在代码中使用"newArrayOfWhens“数组
如果需要,您也可以创建深度克隆,但如果不需要,请尽量避免。您可以使用一个名为"lodash“的库来轻松地完成这项工作,deepClone
https://stackoverflow.com/questions/58748902
复制相似问题