首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue组件:在插槽中使用插槽

Vue组件:在插槽中使用插槽
EN

Stack Overflow用户
提问于 2020-10-23 14:50:28
回答 1查看 139关注 0票数 0

我将v-data-table作为它自己的组件,以使它对我的组件更通用。我想有一个选项,以提供该组件如何在表格中的每个项目的格式。这将通过一个插槽来完成。但问题是,提供的插槽有一个用于v-data-table的插槽。看这个例子,这很难解释。

在我的DataTable组件中,我有:

代码语言:javascript
复制
     <v-data-table 
        :headers="tableHeaders" 
        :items="items" 
        :item-key="itemKey"
        :loading="isLoading" 
        v-model="selectedRows" 
        show-select
    >        
        <!-- What do i put here? -->
    </v-data-table>

我使用来自其他组件的数据表,如下所示:

代码语言:javascript
复制
    <data-table
        :table-headers="tableHeaders"
        :items="messages"
        :is-loading="isLoading"
        :selected-rows="selectedRows"
        :item-key="'MessageID'"
    >        
        <template v-slot:item.actions="{ item }">
            <v-btn :to="`messages/${item.MessageID}`" icon>
                <v-icon>mdi-chevron-right</v-icon>
            </v-btn>
        </template>
        <template v-slot:item.CreatedDateTime="{ item }">
            <span>{{ format(new Date(item.CreatedDateTime)) }}</span>
        </template>
    </data-table>

我需要将结果呈现为:

代码语言:javascript
复制
     <v-data-table 
        :headers="tableHeaders" 
        :items="items" 
        :item-key="itemKey"
        :loading="isLoading" 
        v-model="selectedRows" 
        show-select
    >        
        <template v-slot:item.actions="{ item }">
            <v-btn :to="`messages/${item.MessageID}`" icon>
                <v-icon>mdi-chevron-right</v-icon>
            </v-btn>
        </template>
        <template v-slot:item.CreatedDateTime="{ item }">
            <span>{{ format(new Date(item.CreatedDateTime)) }}</span>
        </template>
    </v-data-table>

所以问题是,我如何在data-table标签中提供要在v-data-table标签中呈现的模板?

EN

回答 1

Stack Overflow用户

发布于 2020-10-23 15:10:49

你将不得不在你的“包装器”组件中重新暴露插槽:

代码语言:javascript
复制
<v-data-table 
  :headers="tableHeaders" 
  :items="items" 
  :item-key="itemKey"
  :loading="isLoading" 
  v-model="selectedRows" 
  show-select
>        
  <template v-slot:body="bodyParams">
    <slot name="body" v-bind="bodyParams" />
  </template>
  <template v-slot:expanded-item="expandedParams">
    <slot name="expanded-item" v-bind="expandedParams" />
  </template>
  <template v-slot:header="headerParams">
    <slot name="header" v-bind="headerParams" />
  </template>
  <template v-slot:footer="footerParams">
    <slot name="footer" v-bind="footerParams" />
  </template>
  <template v-slot:item="itemParams">
    <slot name="item" v-bind="itemParams" />
  </template>
  <template v-slot:progress="progressParams">
    <slot name="progress" v-bind="progressParams" />
  </template>
  <!-- put here the other slots you are interested in -->
</v-data-table>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64495224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档