You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue2迁移至Vue3后Vuetify V-Data-Table排序图标缺失问题咨询

Vue3 + Vuetify V-Data-Table 排序功能正常但排序图标不显示问题解决

问题描述

将Vue2项目升级至Vue3并同步升级Vuetify框架后,修改了V-Data-Table组件适配新的表头布局,同时配置禁用了分页功能。目前表格功能正常,但排序图标无法像旧版本那样显示,不过排序功能本身可正常工作。

问题原因

自定义了表头的column插槽,覆盖了Vuetify默认的表头渲染逻辑,导致默认的排序图标未被渲染。


修复方案

方案一:手动在自定义表头插槽中添加排序图标

在每个自定义column插槽中,引入排序状态变量和触发方法,手动渲染排序图标:

<!-- 以Asks表格的price列为例 -->
<template v-slot:column.price="{ header, toggleSort, isSorted, sortOrder }">
  <span @click="toggleSort" style="cursor: pointer;">
    Price ({{wallets.rel.ticker }})
    <v-icon v-if="isSorted" small>
      {{ sortOrder === 'asc' ? 'mdi-arrow-up' : 'mdi-arrow-down' }}
    </v-icon>
    <v-icon v-else small>mdi-unfold-more</v-icon>
  </span>
</template>
  • toggleSort:Vuetify提供的排序切换触发方法
  • isSorted:标记当前列是否处于排序状态
  • sortOrder:当前排序方向(asc升序 / desc降序)

方案二:复用Vuetify内置表头组件

使用Vuetify的v-data-table-header组件,既保留自定义文本,又自动继承默认排序图标逻辑:

<!-- 以Bids表格的price列为例 -->
<template v-slot:column.price="{ header, props }">
  <v-data-table-header v-bind="props">
    Price ({{wallets.rel.ticker }})
  </v-data-table-header>
</template>

额外优化点

  1. 修正sortBy格式:
    Vuetify3中sort-by的字段名无需方括号,修改data中的配置:
sortBy: [{ key: 'price', order: 'desc' }]
  1. 统一分页禁用配置:
    两个表格分别使用了options="disablePagination"和:disable-pagination="true",统一使用:disable-pagination="true"即可,同时可移除rows-per-page="-1"/items-per-page="-1",因为禁用分页后会自动显示所有数据。

内容的提问来源于stack exchange,提问作者artistAhmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:00:55