Как я могу изменить порядок элементов в таблице данных Vuetify, перетаскивая строки?


Как я могу изменить порядок элементов в таблице данных Vuetify, перетаскивая строки?

09.10.2020 04:35:03 Просмотров 2 Источник

Я работаю над веб-приложением Vuetify для клиента, и она хочет иметь возможность корректировать порядок элементов, отображаемых в таблице данных, перетаскивая строки, но документация Vuetify не объясняет, как это сделать; как я могу это сделать?

У вопроса есть решение - Посмотреть?

Ответы - Как я могу изменить порядок элементов в таблице данных Vuetify, перетаскивая строки? / How can I reorder the items in a Vuetify data table by dragging the rows?

Nathan Wailes

09.10.2020 04:35:03

Вот кодовый код, который я получил в работе: https://codepen.io/NathanWailes/pen/rNLajYO

Он использует:

  • Вю 2.х
  • Vuetify 2.3.13
  • Сортируемый 1.10.2 (поэтому вам нужно будет установить/импортировать его, если у вас его еще нет)

Он основан на ответах в этом выпуске GitHub.

Вот код:

<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)
      }
    }
  },
})
Помочь в развитии проекта:
Закрыть X