Vue Draggable - динамически менять компонент после перетаскивания
У меня есть две отдельные области перетаскивания, и когда я перетаскиваю компоненты из одной области в другую, как я могу динамически изменять состояние моего компонента на основе области, в которую он был перетащен?
В настоящее время я отображаю статус из сериализатора, но хочу динамически изменить его после перетаскивания.
<draggable
class="dragArea published"
:options="{ group: { name: 'g1', put: 'g1'}, animation: 120 }"
@end="onEnd">
<div
v-for="lesson in classroomLessonsPublished"
:class="`lesson-card ${lesson.id}`"
data-status="published">
<div>
{{ lesson.status }}
</div>
</div>
</draggable>
<draggable
class="dragArea unpublished"
:options="{ group: { name: 'g1', put: 'g1'}, animation: 120 }"
@end="onEnd">
<div
v-for="lesson in classroomLessonsUnpublished"
:class="`lesson-card ${lesson.id}`"
data-status="unpublished">
<div>
{{ lesson.status }}
</div>
</div>
</draggable>
1 ответ
draggable
Компонент генерирует событие изменения:
change
Событие запускается, когда свойство prop не равно нулю и соответствующий массив изменяется из-за операции перетаскивания.
Аргумент, передаваемый событию, имеет свойство с именем added
который содержит информацию об элементе, добавленном в массив.
{
newIndex: number, // the index of the added element
element: T // the added element,
}
Пример. Перетащите элемент из опубликованной группы в неопубликованную группу.
шаблон:
<draggable
class="dragArea unpublished"
:options="{ group: { name: 'g1', put: 'g1'}, animation: 120 }"
@change="onUnpublishedChange"
@end="onEnd"
>
<!-- ... -->
</draggable>
сценарий:
methods: {
onUnpublishedChange({ added }) {
if (added) {
added.element.status= false // Not published
}
},
}
Ваши группы имеют одинаковое имя, вам, вероятно, следует изменить его на:
Опубликовано:
:options="{ group: { name: 'published', put: 'unpublished'}, animation: 120 }"
Неопубликованные:
:options="{ group: { name: 'unpublished', put: 'published'}, animation: 120 }"