Search code examples
paginationv-data-table

How to watch directions of pagination in v-data-table vuetify


I need make different get requests to backend depending on whether I move forward or backward on the table. What event I must use and how to make this?


Solution

  • You could use @pagination event from data-table. It emits an object like this:

    {page: 2, itemsPerPage: 5, pageStart: 5, pageStop: 10, pageCount: 2}
    

    So you can capture it in a custom method and determine if 'page' value is higher or lower than current value in order to know if is forward or backward. An example:

    <template>
    <div>
      <v-data-table
        :headers="headers"
        :items="desserts"
        :items-per-page="5"
        class="elevation-1"
        @pagination="writeLog"
      ></v-data-table>
    </div>
    </template>
    <script>
      export default {
        data () {
          return {
            headers: [
              {
                text: 'Dessert (100g serving)',
                align: 'start',
                sortable: false,
                value: 'name',
              },
              { text: 'Calories', value: 'calories' },
              { text: 'Fat (g)', value: 'fat' },
              { text: 'Carbs (g)', value: 'carbs' },
              { text: 'Protein (g)', value: 'protein' },
              { text: 'Iron (%)', value: 'iron' },
            ],
            desserts: [
              {
                name: 'Frozen Yogurt',
                calories: 159,
                fat: 6.0,
                carbs: 24,
                protein: 4.0,
                iron: '1%',
              },
              {
                name: 'Ice cream sandwich',
                calories: 237,
                fat: 9.0,
                carbs: 37,
                protein: 4.3,
                iron: '1%',
              },
              {
                name: 'Eclair',
                calories: 262,
                fat: 16.0,
                carbs: 23,
                protein: 6.0,
                iron: '7%',
              },
              {
                name: 'Cupcake',
                calories: 305,
                fat: 3.7,
                carbs: 67,
                protein: 4.3,
                iron: '8%',
              },
              {
                name: 'Gingerbread',
                calories: 356,
                fat: 16.0,
                carbs: 49,
                protein: 3.9,
                iron: '16%',
              },
              {
                name: 'Jelly bean',
                calories: 375,
                fat: 0.0,
                carbs: 94,
                protein: 0.0,
                iron: '0%',
              },
              {
                name: 'Lollipop',
                calories: 392,
                fat: 0.2,
                carbs: 98,
                protein: 0,
                iron: '2%',
              },
              {
                name: 'Honeycomb',
                calories: 408,
                fat: 3.2,
                carbs: 87,
                protein: 6.5,
                iron: '45%',
              },
              {
                name: 'Donut',
                calories: 452,
                fat: 25.0,
                carbs: 51,
                protein: 4.9,
                iron: '22%',
              },
              {
                name: 'KitKat',
                calories: 518,
                fat: 26.0,
                carbs: 65,
                protein: 7,
                iron: '6%',
              },
            ],
          }
          currentPage = 1
        },
        methods: {
           writeLog(paginationObject){
                let action
                console.log(paginationObject);
                this.currentPage < paginationObject.page ? action = 'forward' : action ='backguard'
                this.currentPage = paginationObject.page
                console.log(action)
                //Write code to call your backend using action...
            }
        },
    
      }
    </script>