You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 7-8.RSVP
Socket
Socket
Sign inDemoInstall

vuedraggable

Package Overview
Dependencies
Maintainers
1
Versions
53
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vuedraggable

draggable component for vue


Version published
Weekly downloads
706K
increased by1.54%
Maintainers
1
Install size
547 kB
Created
Weekly downloads
 

Package description

What is vuedraggable?

vuedraggable is a Vue.js component that allows you to create draggable and sortable lists with ease. It is based on the Sortable.js library and provides a simple way to implement drag-and-drop functionality in your Vue applications.

What are vuedraggable's main functionalities?

Basic Draggable List

This code sample demonstrates a basic draggable list using vuedraggable. The list items can be dragged and reordered.

<template>
  <draggable v-model="items">
    <div v-for="item in items" :key="item.id">{{ item.name }}</div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ]
    };
  }
};
</script>

Draggable with Handle

This code sample shows how to use a handle for dragging items. Only the handle (represented by '::') can be used to drag the items.

<template>
  <draggable v-model="items" handle=".handle">
    <div v-for="item in items" :key="item.id">
      <span class="handle">::</span> {{ item.name }}
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' }
      ]
    };
  }
};
</script>

Nested Draggable Lists

This code sample demonstrates how to create nested draggable lists. Both parent and child items can be dragged and reordered independently.

<template>
  <draggable v-model="parentItems">
    <div v-for="parent in parentItems" :key="parent.id">
      <div>{{ parent.name }}</div>
      <draggable v-model="parent.children">
        <div v-for="child in parent.children" :key="child.id">{{ child.name }}</div>
      </draggable>
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  components: { draggable },
  data() {
    return {
      parentItems: [
        { id: 1, name: 'Parent 1', children: [
          { id: 11, name: 'Child 1' },
          { id: 12, name: 'Child 2' }
        ]},
        { id: 2, name: 'Parent 2', children: [
          { id: 21, name: 'Child 3' },
          { id: 22, name: 'Child 4' }
        ]}
      ]
    };
  }
};
</script>

Other packages similar to vuedraggable

Readme

Source

Vue.Draggable

GitHub open issues npm download npm download per month npm version Package Quality vue2 MIT License

Vue component (Vue.js 2.0) or directive (Vue.js 1.0) allowing drag-and-drop and synchronization with view model array.

Based on and offering all features of Sortable.js

Demo

demo gif

Features

  • Full support of Sortable.js features:
    • Supports touch devices
    • Supports drag handles and selectable text
    • Smart auto-scrolling
    • Support drag and drop between different lists
    • No jQuery dependency
  • Keeps in sync HTML and view model list
  • Compatible with Vue.js 2.0 transition-group
  • Cancellation support
  • Events reporting any changes when full control is needed

For Vue.js 2.0

Use draggable component:

Typical use:

<draggable v-model="myArray" :options="{group:'people'}" @start="drag=true" @end="drag=false">
   <div v-for="element in myArray">{{element.name}}</div>
</draggable>

.vue file:

  import draggable from 'vuedraggable'
  ...
  export default {
        components: {
            draggable,
        },
  ...

With transition-group:

<draggable v-model="myArray">
    <transition-group>
        <div v-for="element in myArray" :key="element.id">
            {{element.name}}
        </div>
    </transition-group>
</draggable>

Draggable component should directly wrap the draggable elements, or a transition-component containing the draggable elements.

With Vuex:

<draggable v-model='myList'>
computed: {
    myList: {
        get() {
            return this.$store.state.myList
        },
        set(value) {
            this.$store.commit('updateList', value)
        }
    }
}

Props

value

Type: Array
Required: false
Default: null

Input array to draggable component. Typically same array as referenced by inner element v-for directive.
Should not used directly but used only though the v-model directive:

<draggable v-model="myArray">
list

Type: Array
Required: false
Default: null

Altenative to the value prop, list is an array to be synchronized with drag-and-drop.
The main diference is that list prop is updated by draggable component using splice method, whereas value is immutable.
Using v-model and value is the compatible with Vuex and thus is the preferred way of using draggable.

options

Type: Object
Required: false

Option used to initialize the sortable object see: sortable option documentation
Note that all the method starting by "on" will be ignored as draggable component expose the same API via events.

element

Type: String
Default: 'div'

HTML node type of the element that draggable component create as outer element for the included slot.

clone

Type: Function
Required: false
Default: (original) => { return original;}

Function called on the source component to clone element when clone option is true. The unique argument is the viewModel element to be cloned and the returned value should be its cloned version.
By default vue.draggable reuses the viewModel element, so you have to use this hook if you want to clone or deep clone it.

move

Type: Function
Required: false
Default: null

If not null this function will be called in a similar way as Sortable onMove callback. Returning false will cancel the drag operation.

function onMoveCallback(evt, originalEvent){
   ...
    // return false; — for cancel
}

evt object has same property as Sortable onMove event, and 3 additional properties:

  • draggedContext: context linked to dragged element
    • index: dragged element index
    • element: dragged element underlying view model element
    • futureIndex: potential index of the dragged element if the drop operation is accepted
  • relatedContext: context linked to current drag operation
    • index: target element index
    • element: target element view model element
    • list: target list
    • component: target VueComponent

HTML:

<draggable :list="list" :move="checkMove">

javascript:

checkMove: function(evt){
    return (evt.draggedContext.element.name!=='apple');
}

See complete example: Cancel.html, cancel.js

Events

  • Support for Sortable events:

    start, add, remove, update, end, choose, sort, filter, clone
    Events are called whenever onStart, onAdd, onRemove, onUpdate, onEnd, onChoose, onSort, onClone are fired by Sortable.js with the same argument.
    See here for reference

    Note that SortableJS OnMove callback is mapped with the move prop

HTML:

<draggable :list="list" @end="onEnd">
  • change event

    change event is triggered when list prop is not null and the corresponding array is altered due to drag-and-drop operation.
    This event is called with one argument containing one of the following properties:

    • added: contains information of an element added to the array
      • newIndex: the index of the added element
      • element: the added element
    • removed: contains information of an element removed from to the array
      • oldIndex: the index of the element before remove
      • element: the removed element
    • moved: contains information of an element moved within the array
      • newIndex: the current index of the moved element
      • oldIndex: the old index of the moved element
      • element: the moved element

Gotchas

  • Drag operation with empty list:

    To be able to drag items on an empty draggable component, set a min-height>0 on the draggable component or the transition-group if any.

Fiddle

Full demo example

draggable-example

For Vue.js 1.0

See here

Installation

  • Available through:
 npm install vuedraggable
 Bower install vue.draggable
  • For Modules
    // ES6
    //For Vue.js 2.0
    import draggable from 'vuedraggable'
    ...
    export default {
          components: {
              draggable,
              ...
          }
          ...
    
    //For Vue.js 2.0
    var draggable = require('vuedraggable')
    
  • For <script> Include

    Just include Sortable.min.js and vuedraggable.min.js after Vue.

Keywords

FAQs

Package last updated on 05 Mar 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc