- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用Vue.Draggable基于 SortableJS 的库图书馆。
在我的代码中,我有 2 个可拖动列表,但我有第三个列表,但未与简单元素合并。
第三个列表有一个对象数组,每个对象都有一个端点条目,当我删除元素时,我想要执行一个函数,从端点获取对象数组并将其与目标列表合并。
var vm = new Vue({
el: "#main",
data: {
list: [{
name: "John"
}, {
name: "Joao"
}, {
name: "Jean"
}],
list2: [{
name: "Juan"
}, {
name: "Edgard"
}, {
name: "Johnson"
}],
list3: [{
name: "First",
endpoint: 'http://api.com/first'
}, {
name: "Second",
endpoint: 'http://api.com/second'
}, {
name: "Third",
endpoint: 'http://api.com/third'
}]
},
methods: {
getAllTheFirstNames (evt) {
// i want to do something like this
axios.get(evt.elementDragged.endpoint)
.then(res => {
evt.dropList.add(res.data /* res.data is an array of names */)
})
},
add: function() {
this.list.push({
name: 'Juan'
});
},
replace: function() {
this.list = [{
name: 'Edgard'
}]
}
}
});
.normal {
background-color: grey;
}
.drag {
background-color: green;
}
.dragArea {
min-height: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.7.0/Sortable.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.17.0/vuedraggable.min.js"></script>
<div id="main">
<h1>Vue Draggable</h1>
<div class="drag">
<h2>List 1 Draggable</h2>
<draggable v-model="list" class="dragArea" :options="{group:'people'}">
<div v-for="element in list">{{element.name}}</div>
</draggable>
<h2>List 2 Draggable</h2>
<draggable v-model="list2" class="dragArea" :options="{group:'people'}">
<div v-for="element in list2">{{element.name}}</div>
</draggable>
<h2>List 3 Draggable</h2>
<draggable v-model="list3" class="dragArea" :options="{group:'people'}" @end="getAllTheFirstNames">
<div v-for="element in list3">{{element.name}}</div>
</draggable>
</div>
</div>
这是fiddle
最佳答案
对于那些遇到类似问题的人,这里是解决方案。
首先,您需要使用 @end
事件,然后在您的方法中,您可以通过访问将在 v- 中初始化的属性来获取拖动元素的 ID。对于
,在我的例子中它是data-id
,所以我可以像这样访问它:
let id = evt.item.dataset.id
现在您的函数中已经有了 id,您可以使用 API 获取对象数组。
接下来,您需要将刚刚恢复的数组添加到具有正确索引的第二个列表中,为此,您需要获取第二个列表的目标索引并将您的数组提供给它:
let index = evt.newIndex
this.secondList.splice(index, 0, ...myArray)
最后一步,您需要清理第二个列表,因为初始拖动的元素也会在那里,对我来说,我只是做了一个循环,如果我没有在其中一个对象中找到某个属性,则意味着它必须被删除,但你确实可以想到任何东西。
这是完整的代码:
<draggable
v-model="firstList"
:clone="clone"
:options="options"
@end="onEnd">
<div
v-for="c in firstList"
:key="c.id"
:data-id="c.id">
</div>
</draggable>
...
onEnd (evt) {
const id = evt.item.dataset.id
HTTP.get(`/${id}/getMyArray`)
.then(res => {
let myObjects = JSON.parse(res.data) // => [{...}, {...}, ...]
let index = evt.newIndex
this.secondList.splice(index, 0, ...myObjects)
})
}
关于javascript - 拖动一个元素但放下其他元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54647587/
为了练习使用 supervisor 保持 Flask 服务器处于事件状态,我插入了 sys.exit(): import sys from flask import Flask app = Flask
我正在使用 OnMouseDrag 事件来移动对象。我遇到的问题是,除非释放鼠标按钮,否则对象不会掉落。如果拖动到屏幕上的某个位置 (2d),我希望能够让对象掉落。因此,即使鼠标按钮仍处于按下状态,也
我在 html 中有一个 div,在 Div 之后还有另一个 div,其中包含位于 div 顶部的 HTML 表格。如何把 table 放下。 Mynumber: ". $num."
我是一名优秀的程序员,十分优秀!