【问题标题】:Vuetify: Show pagination controls at the top of my v-data-table as well as in the footerVuetify:在我的 v-data-table 顶部以及页脚中显示分页控件
【发布时间】:2020-05-02 17:21:37
【问题描述】:

v-data-table 有一个 top 插槽,其结构与 footer 插槽的结构匹配的 pagination 属性。是否可以分配top 插槽来引用footer 正在使用的相同(可能是v-pagination)控件?

我的目标是复制表格顶部的分页控件(位于页脚中)。

【问题讨论】:

    标签: vue.js vuejs2 vue-component vuetify.js v-data-table


    【解决方案1】:

    事实上,v-data-table 页脚槽中默认显示的控件是正常的(公共 - 非内部)Vuetify 组件v-data-footer。您可以像这样轻松地将其添加到顶部插槽中:

    <div id="app">
      <v-app id="inspire">
        <v-data-table
          v-model="selected"
          :headers="headers"
          :items="desserts"
          :items-per-page="5"
          :single-select="true"
          item-key="name"
          show-select
          class="elevation-1"
        >
          <template v-slot:top="{ pagination, options, updateOptions }">
            <v-data-footer 
              :pagination="pagination" 
              :options="options"
              @update:options="updateOptions"
              items-per-page-text="$vuetify.dataTable.itemsPerPageText"/>
          </template>
        </v-data-table>
      </v-app>
    </div>
    

    Demo

    【讨论】:

    • 这正是我想要的。我不想重新发明轮子,但找不到这样的例子。谢谢!
    • 要使其与v-data-iterator 一起使用,请使用v-slot:header 而不是v-slot:top
    • 要从显示中删除旧页脚,您需要添加hide-default-footer
    • @EbrahimKaram 很好的提示,但我的目的是在 页眉和页脚中显示分页控件。
    【解决方案2】:

    如果它使用 v-paginate 组件会起作用吗?这是一个关于 codepen 的工作示例。

    https://codepen.io/v08i/pen/JjoVmVR

    <div id="app">
      <v-app id="inspire">
         <v-card>
           <v-btn color="primary" @click="dialog = true">Open Dialog</v-btn>
           <v-dialog v-model="dialog" :fullscreen="fullScreen" transition="dialog-bottom-transition" :overlay=false
    scrollable>
          <v-card>
              <v-toolbar style="flex: 0 0 auto;" dark class="primary">
              <v-btn icon @click.native="dialog = false" dark>
                <v-icon>close</v-icon>
              </v-btn>
              <v-toolbar-title>Data</v-toolbar-title>
              <v-spacer></v-spacer>
            </v-toolbar>
            <v-card-text>
              <v-card-title>
            Nutrition
            <v-spacer></v-spacer>
            <v-text-field
              :append-icon="search?'close':'search'"
              :append-icon-cb="() => (search = '')"
              @keydown.native.escape="search=''"
              label="Search"
              single-line
              hide-details
              v-model="search"
            ></v-text-field>
          </v-card-title>
        <div>
              <v-pagination v-model="pagination.page" :length="pages"></v-pagination>
          <v-data-table
            v-bind:headers="headers"
            v-bind:items="items"
            v-bind:search="search"
            v-bind:pagination.sync="pagination"
            hide-actions
            class="elevation-1"
          >
            <template slot="header" scope="props">
            </template>
            <template slot="headerCell" scope="props">
              <v-tooltip bottom>
                <span slot="activator">
                  {{ props.header.text }}
                </span>
                <span>
                  {{ props.header.text }}
                </span>
              </v-tooltip>
            </template>
            <template slot="items" scope="props">
              <td>{{ props.item.name }}</td>
              <td  class="text-xs-right">{{ props.item.calories }}</td>
              <td  class="text-xs-right">{{ props.item.fat }}</td>
              <td  class="text-xs-right">{{ props.item.carbs }}</td>
              <td  class="text-xs-right">{{ props.item.protein }}</td>
              <td  class="text-xs-right">{{ props.item.sodium }}</td>
              <td  class="text-xs-right">{{ props.item.calcium }}</td>
              <td  class="text-xs-right">{{ props.item.iron }}</td>
            </template>
          </v-data-table>
          <div class="text-xs-center pt-2">
            <v-pagination v-model="pagination.page" :length="pages"></v-pagination>
    
            </v-card-text>
    
              <div style="flex: 1 1 auto;"></div>
          </v-card>
    
        </v-dialog>
    
    
            </v-card>
    
    
      </v-app>
    </div>
    
    new Vue({
      el: '#app',
      data () {
        return {
          dialog: false,
          fullScreen: true,
          search: '',
          pagination: {},
          selected: [],
          headers: [
            {
              text: 'Dessert (100g serving)',
              align: 'left',
              sortable: false,
              value: 'name'
            },
            { text: 'Calories', value: 'calories' },
            { text: 'Fat (g)', value: 'fat' },
            { text: 'Carbs (g)', value: 'carbs' },
            { text: 'Protein (g)', value: 'protein' },
            { text: 'Sodium (mg)', value: 'sodium' },
            { text: 'Calcium (%)', value: 'calcium' },
            { text: 'Iron (%)', value: 'iron' }
          ],
          items: [
            {
                value: false,
                name: 'Frozen Yogurt',
                calories: 159,
                fat: 6.0,
                carbs: 24,
                protein: 4.0,
                sodium: 87,
                calcium: '14%',
                iron: '1%'
              },
              {
                value: false,
                name: 'Ice cream sandwich',
                calories: 237,
                fat: 9.0,
                carbs: 37,
                protein: 4.3,
                sodium: 129,
                calcium: '8%',
                iron: '1%'
              },
              {
                value: false,
                name: 'Eclair',
                calories: 262,
                fat: 16.0,
                carbs: 23,
                protein: 6.0,
                sodium: 337,
                calcium: '6%',
                iron: '7%'
              },
              {
                value: false,
                name: 'Cupcake',
                calories: 305,
                fat: 3.7,
                carbs: 67,
                protein: 4.3,
                sodium: 413,
                calcium: '3%',
                iron: '8%'
              },
              {
                value: false,
                name: 'Gingerbread',
                calories: 356,
                fat: 16.0,
                carbs: 49,
                protein: 3.9,
                sodium: 327,
                calcium: '7%',
                iron: '16%'
              },
              {
                value: false,
                name: 'Jelly bean',
                calories: 375,
                fat: 0.0,
                carbs: 94,
                protein: 0.0,
                sodium: 50,
                calcium: '0%',
                iron: '0%'
              },
              {
                value: false,
                name: 'Lollipop',
                calories: 392,
                fat: 0.2,
                carbs: 98,
                protein: 0,
                sodium: 38,
                calcium: '0%',
                iron: '2%'
              },
              {
                value: false,
                name: 'Honeycomb',
                calories: 408,
                fat: 3.2,
                carbs: 87,
                protein: 6.5,
                sodium: 562,
                calcium: '0%',
                iron: '45%'
              },
              {
                value: false,
                name: 'Donut',
                calories: 452,
                fat: 25.0,
                carbs: 51,
                protein: 4.9,
                sodium: 326,
                calcium: '2%',
                iron: '22%'
              },
              {
                value: false,
                name: 'KitKat',
                calories: 518,
                fat: 26.0,
                carbs: 65,
                protein: 7,
                sodium: 54,
                calcium: '12%',
                iron: '6%'
              }
          ],
        }
      },
      computed: {
        pages () {
          return this.pagination.rowsPerPage ? Math.ceil(this.items.length / this.pagination.rowsPerPage) : 0
        }
      },
      methods: {
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 2019-12-13
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      相关资源
      最近更新 更多