vue-draggable

by Steve

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/[email protected]/Sortable.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.16.0/vuedraggable.min.js"></script>
<div id="app">
  <h1>Tasks</h1>
  <div class="container">
    <ul class="collection with-header">
      <draggable :list="tasks"
             class="dragArea"
                  :move="beforeMove"
                  @end="onEnd">
        <li v-for="task in tasks" class="collection-item">
          {{task.name}}
        </li>
      </draggable>
    </ul>
    <button @click="add" class="waves-effect waves-light btn">Add</button>
    <button @click="replace" class="waves-effect waves-light btn deep-orange lighten-2">Replace</button>
  </div>
</div>

Vue

var app = new Vue({
  el: "#app",
  data: {
    tasks:[
      uwu:
        {name:"Meeting"}, 
        {name:"Create a document"}, 
        {name:"Appointment"}
      }
    ]
  },
  methods:{
    add: function() {
      this.tasks.push({name:'Juan'});
    },
    replace: function() {
      this.tasks = [{name:'Edgard'}]
    },
    beforeMove: function(evt) {
      return evt.draggedContext.element.name !== 'Meeting';
    },
    onEnd: function(evt) {
      console.log(evt);
      alert('Moved!!');
    }
  }
});