AlexeiP
AlexeiP

Reputation: 653

How to make vuetify v-data-table vertically span all available space

Is it possible to make v-data-table vertically span all available space and pagination bar stick to the bottom like on "Desired layout" snapshot

Desired layout

Here is my codepen where commented html shows what I've tried already

<div id="app">
              <v-data-table 
                            :items='alarms' 
                            :headers="headers"
                            class="elevation-1"
                            fill-height>
                <template slot="items" slot-scope="props">
                  <td>{{ props.item.fridgeDisplayName }}</td>
                  <td>{{ props.item.state }}</td>
                  <td>{{ props.item.task }}</td>
                </template>
              </v-data-table>
</div>

Upvotes: 4

Views: 6868

Answers (1)

Boussadjra Brahim
Boussadjra Brahim

Reputation: 1

In the official docs there's no way to do that but you could do it simply using CSS by adding the following rules :

.theme--light.v-datatable .v-datatable__actions {
    position: fixed;
    bottom: 0;
    width: 100%;
}

new Vue({
  el: '#app',
  data() {
    return {
      //pagination: {},
      headers: [{
          text: 'Name',
          value: 'fridgeDisplayName'
        },
        {
          text: 'State',
          value: 'state'
        },
        {
          text: 'Task',
          value: 'task'
        },
      ],
      alarms: [{
          fridgeDisplayName: 'Test1',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test2',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test3',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test4',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test5',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test6',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test7',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test8',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test9',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test10',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test11',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test12',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test13',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test14',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test15',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test16',
          state: 'Some state',
          task: '6.0'
        },
        {
          fridgeDisplayName: 'Test17',
          state: 'Some state',
          task: '6.0'
        }
      ]
    }
  },
  computed: {
    /*pages () {
      if (this.pagination.rowsPerPage == null ||
        this.pagination.totalItems == null
      ) return 0

      return Math.ceil(this.pagination.totalItems / this.pagination.rowsPerPage)
    }*/
  }
})
.theme--light.v-datatable .v-datatable__actions {
    position: fixed;
    bottom: 0;
    width: 100%;
}
<script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vuetify.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/vuetify.min.css">
<div id="app" data-app>
  <v-data-table :items='alarms' :headers="headers" class="elevation-1" fill-height>
    <template slot="items" slot-scope="props">
                      <td>{{ props.item.fridgeDisplayName }}</td>
                      <td>{{ props.item.state }}</td>
                      <td>{{ props.item.task }}</td>
                    </template>
  </v-data-table>

</div>

the full pen code

Upvotes: 2

Related Questions