我是Vutify的新手,正在努力将默认的筛选和排序功能添加回具有定制标题的表中.

超文本标记语言:

<v-data-table
  :headers="headers"
  :items="items"
  item-key="client"
  :footer-props="footerProps"
  :search="search"
  class="text-body-1"
>
  <template #header="{ props }">
    <thead class="v-data-table-header">
    <tr>
      <th
        v-for="header in props.headers"
        :key="header.value"
        :class="{
                    'grey white--text text-body-1': true,
                    'sortable': header.sortable,
                    'filter': header.filterable,
                  }"
        scope="col"
      >
        {{ header.text }}
      </th>
    </tr>
    </thead>
  </template>

我正在处理的标头的数据 struct 如下:

headers: [
    new TableHeader('Number', 'index', false, false),
    new TableHeader('EMP Code', 'empCode', false, false),
]

和表格标题:

export default function (header, prop, sortable = true, filterable = false, align = 'start') {
  this.text = header
  this.value = prop
  this.sortable = sortable
  this.filterable = filterable
  this.align = align
}

有了所有这些,表格标题看起来就像它应该的样子,但我不能再点击标题并对其进行排序.

有谁知道如何添加默认筛选器并重新排序,或者可能只是一种不同的方式来设置标题的样式,从而保留默认标题功能和自定义样式.除了样式之外,页眉上没有任何变化.

(我见过很多类似这个问题的问题,但没有一个能以我可以复制的方式真正回答:)

我期望我的页眉具有带有默认功能(排序、筛选等)的自定义样式,但我得到的是没有默认功能(排序、筛选等)的自定义外观.

推荐答案

#header槽接收一个对象on作为槽props ,其中包含回调:

  on: {
    sort: (value: string) => void,
    group: (value: string) => void,
    toggle-select-all: (value: boolean) => void
  }

header.value传递给on.sort函数以触发排序:

<template #header="{ props, on }">
  <tr>
    <th
      v-for="header in props.headers"
      ...
      @click="on.sort(header.value)"
    >
      ...

它将遵循与常规标题相同的排序周期(关->;asc->;desc->;关).

以下是它的一个片段:

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  template: `
    <v-app>
      <v-main>
        <v-container>
          <v-data-table
            :items="items"
            :headers="headers"
          >
            <template #header="{props, on: {sort}}">
              <tr>
                <th
                  v-for="header in props.headers"
                  :key="header.value"
                  @click="sort(header.value)"
                >
                  Le {{header.value}} <span
                    v-if="props.options.sortBy[0] === header.value"
                  >{{ props.options.sortDesc[0] ? 'desc' : 'asc'}}
                  </span>
                </th>
              </tr>
            </template>
          </v-data-table>
        </v-container>
      </v-main>
    </v-app>
  `,
  data(){
    return {
      headers: [{text: 'Number', value: 'number'}, {text: 'Letter', value: 'letter'}],
      items: Array.from({length: 5}, (_,i) => ({number: i+1, letter: String.fromCharCode(90-i)})),
    }
  },
  methods: {
    log(...x){console.log(...x)}
  }
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">

<div id="app"></div>

<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>

Vue.js相关问答推荐

使用nuxt I18N验证规则消息翻译

如何防止Nuxt3重新加载时滚动跳到网页顶部

v-on 的 .native 修饰符仅在组件上有效,但在 标签上使用

在 Ajax 函数中访问 Vue.js 组件属性

nuxt.js - 预加载 .woff 字体加载为@font-face

Defer推迟执行,直到外部脚本加载到 Vue.js

如何渲染数组以 Select 选项 vue.js

Vue:如何将 store 与组件一起使用?

Vuetify 容器不会填充高度

在 SPA VueJS 中全局声明 mapState 和 mapMutations

如何将 mapActions 与 vue + Typescript 类组件一起使用?

如何将 vuetify 2.0 beta 安装到新的 vue cli 项目中?

Vue.js:从 parent父Vue 获取数据

v-for 如何在继续之前判断未定义的列表

阻止 Vue 积极重用 dom 元素

如何确定 Vue 何时完成更新 DOM?

过渡后的 v-if 下方的过渡元素

如何使用 Vue Test utils 测试输入是否聚焦?

vuex 是 state.array.push react式的吗?

vuejs 中缺少 webpack 配置