如何通过拖动行对Vutify数据表中的项目进行重新排序?

2022-03-01 00:00:00 vue.js vuetify.js

我正在为一位客户开发Vutify Web应用,她希望能够通过拖放行来调整元素在数据表中的显示顺序,但Vutify文档没有说明如何做到这一点;我该如何做到这一点?


解决方案

这是我使用的CodePen:https://codepen.io/NathanWailes/pen/rNLajYO

它使用:

  • Vue 2.x
  • 认证2.3.13
  • Sortable1.10.2(如果您还没有,则需要安装/导入它)

它基于this GitHub issue中的答案。

代码如下:

<div id="app">
  <v-app>
    <v-data-table
      :headers="headers"
      :items="desserts"
      v-sortable-data-table
      @sorted="saveOrder"
      item-key="name"
    ></v-data-table>
  </v-app>
</div>

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  data () {
    return {
      headers: [
        {
          text: 'Dessert',
          align: 'start',
          sortable: false,
          value: 'name',
        },
      ],
      desserts: [
        {
          name: 'Frozen Yogurt',
        },
        {
          name: 'Ice cream sandwich',
        },
        {
          name: 'Eclair',
        },
        {
          name: 'Cupcake',
        },
        {
          name: 'Gingerbread',
        },
      ],
    }
  },
  methods: {
    saveOrder (event) {
      const movedItem = this.desserts.splice(event.oldIndex, 1)[0];
      this.desserts.splice(event.newIndex, 0, movedItem);
    }
  },
  directives: {
    sortableDataTable: {
      bind (el, binding, vnode) {
        const options = {
          animation: 150,
          onUpdate: function (event) {
            vnode.child.$emit('sorted', event)
          }
        }
        Sortable.create(el.getElementsByTagName('tbody')[0], options)
      }
    }
  },
})

相关文章