我尝试使用嵌套的vue可拖动元素来直观地表示歌曲结构(可能有重复)。
这是我设计的原型
var vm = new Vue({
el: "#main",
data: {
"structure": ["Prelude", "Verse", ["Chorus", "Verse"], "Last Chorus"]
},
});
#main {
text-align: center;
width: 300px;
background-color: #EEE;
padding:10px;
}
.element {
text-align: center;
padding: 10px;
margin: 5px auto;
border-radius: 10px;
color: #FFF;
font-family: sans-serif;
font-weight: bold;
}
.tag {
width: 150px;
background-color: #007BFF;
}
.group {
width: 175px;
border: 3px solid #CED4DA;
background-color: #FFF;
}
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/sortablejs@1.7.0/Sortable.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.15.0/vuedraggable.min.js"></script>
<div id="main">
<draggable v-for="tag in structure" :options="{group:'tags'}">
<div v-if="!Array.isArray(tag)" class="tag element">
{{tag}}
</div>
<draggable v-else :options="{group:'tags'}" class="group element">
<div v-for="tag2 in tag" class="tag element">
{{tag2}}
</div>
</draggable>
</draggable>
{{structure}}
</div>
即使是VueIdejs的新手,这似乎也不是要走的"路"。我对这个解决方案的具体问题是:
- 当分组元素位于顶部时,我不能拖动它上面的任何东西(这同样适用于最底部)
- 拖动的结构不会在data.structure属性中表示
- 我该怎么做才能有更多的窝呢?一群一群...
1条答案
按热度按时间pqwbnv8z1#
您应该:
1.将数据结构更改为递归结构:
1.使用draggable来使用递归组件,类似于:
请参见此工作示例:
https://sortablejs.github.io/Vue.Draggable/#/nested-example