Javascript vue可拖动-无法直接改变我的阵列
我正在使用Javascript vue可拖动-无法直接改变我的阵列,javascript,vue.js,sortablejs,Javascript,Vue.js,Sortablejs,我正在使用vue draggable更改数组元素顺序。假设我的数组是: data: { array1: [{text: 'text1'},{text: 'text2'},{text: 'text3'}] } 在我的模板上,我只使用: <draggable v-model="array1" > v-for etc... </draggable> 我使用vue可拖动和bam: “[Vue warn]:避免直接改变道具,因为每当父组件重新呈现时,该值将被覆盖。” 我不能简
vue draggable
更改数组元素顺序。假设我的数组是:
data: {
array1: [{text: 'text1'},{text: 'text2'},{text: 'text3'}]
}
在我的模板上,我只使用:
<draggable v-model="array1" >
v-for etc...
</draggable>
我使用vue可拖动和bam:
“[Vue warn]:避免直接改变道具,因为每当父组件重新呈现时,该值将被覆盖。”
我不能简单地在数据内部声明array1
,因为它是异步的。所以我把它写在计算机里:
array2: {
get: function () {
//return JSON.parse(JSON.stringify(this.array1))
return this.array1.slice()
},
set: function () {
this.array2
}
},
array2: {
get: function () {
if (this.modifiedArray) {
return this.modifiedArray;
}
//return JSON.parse(JSON.stringify(this.array1))
return this.array1.slice()
},
set: function () {
this.proTemplate
}
},
这显然行不通,因为getter总是硬编码为prop的slice()。我昨天在这里提出了一个问题:
因此建议在array2
computed中编写某种新的computed并添加if语句:
array2: {
get: function () {
//return JSON.parse(JSON.stringify(this.array1))
return this.array1.slice()
},
set: function () {
this.array2
}
},
array2: {
get: function () {
if (this.modifiedArray) {
return this.modifiedArray;
}
//return JSON.parse(JSON.stringify(this.array1))
return this.array1.slice()
},
set: function () {
this.proTemplate
}
},
我在将vue可拖动更改寻址到modifiedArray computed时遇到了一个问题,因为我无法在可拖动内更改v模型:
有人知道如何更改它以在外部阵列/计算中获得vue可拖动结果吗?我试图复制我对您的问题的理解 我使用Lodash库中的
clone
方法来防止“[Vue warn]:避免直接变异道具…”
错误
希望它有帮助这不会起作用,因为prop['array']是异步的。这将仅在开始时克隆空阵列。这是相当棘手的:)您应该发出一个事件来通知父组件更新值,一旦父组件更新了道具,子组件也将更新。道具将以只读方式使用。尽管如此,正如@Sphinx所建议的,您可以发出一个事件,以便在父组件中进行突变。