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

如何在自定义组件中使用Vuetify 3 Data-Table的v-slot功能?

问题解决:封装Vuetify v-data-table后插槽失效

问题根源

自定义组件MyDataTable未将父组件传入的插槽透传给内部的v-data-table。Vue组件的插槽是作用域封闭的,父组件传给自定义组件的插槽不会自动传递给其内部子组件,必须显式处理。

解决方案

修改@/components/MyDataTable.vue,通过插槽遍历将所有传入的插槽转发给内部的v-data-table,同时传递对应的插槽作用域参数:

<template>
  <div>
    <v-data-table :headers="headers" :items="items">
      <!-- 透传所有插槽给内部v-data-table -->
      <template v-for="(_, slotName) in $slots" v-slot:[slotName]="slotProps">
        <slot :name="slotName" v-bind="slotProps"></slot>
      </template>
    </v-data-table>
  </div>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      default: () => [],
    },
    headers: {
      type: Array,
      default: () => [],
    },
  },
};
</script>

原理说明

  • Vue 3中$slots包含所有普通插槽和作用域插槽,通过v-for遍历所有插槽名称,再通过动态插槽名v-slot:[slotName]绑定到内部v-data-table的对应插槽上。
  • v-bind="slotProps"会将插槽的作用域参数(如column、item)完整传递,保证父组件的插槽能获取到v-data-table提供的原始数据。

修改后,App.vue中定义的column.name和item.name插槽即可正常作用于内部的v-data-table,实现与原生组件一致的插槽效果。

内容的提问来源于stack exchange,提问作者Ersin Güvenç

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:47:26