简体   繁体   English

Vue.js 将插槽传递给包装好的 Bootstrap-Vue 表组件

[英]Vue.js pass slot to wrapped Bootstrap-Vue Table component

I'm trying to create a wrapper for the bootstrap-vue Table component.我正在尝试为 bootstrap-vue Table 组件创建一个包装器。 This component uses slots to define cell templates, like that:该组件使用插槽来定义单元格模板,如下所示:

<b-table :items="itemsProvider" v-bind="options">
    <template v-slot:cell(id)="data">
        ///...here goes the template for the cell's of itens key "id"
    </template>
</b-table>

So, the wrapper i'm creating is like this:所以,我正在创建的包装是这样的:

    <div>
        <b-table :items="itemsProvider" v-bind="options" >
            <slot></slot>
        </b-table>
        <b-pagination
                v-model="currentPage"
                :total-rows="rows"
                :per-page="perPage"
                 />
    </div>

And i want to call this component like this:我想这样称呼这个组件:

<TableAjax :options="options">
    <template v-slot:cell(id)="data">
        ///...here goes the template for the cell's of itens key "id"                    
    </template>
</TableAjax>

But, since the slots needed on the b-table component are named, i'm having a hard time passing it from the wrapper.但是,由于 b-table 组件上所需的插槽已命名,我很难从包装器中传递它。

How can i do that?我怎样才能做到这一点?

Passing slots to a child component can be done like this:将插槽传递给子组件可以这样完成:

<template>
  <div>
    <b-table :items="itemsProvider" v-bind="options" >
      <template v-slot:cell(id)="data">
         <slot name="cell(id)" v-bind="data"></slot>
      </template>
    </b-table>
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
    />
  </div>
</template>

But since you may not know the slot names ahead of time, you would need to do something similar to the following:但是由于您可能不提前知道插槽名称,因此您需要执行类似以下的操作:

<template>
  <div>
    <b-table :items="itemsProvider" v-bind="options" >
      <template v-for="slotName in Object.keys($scopedSlots)" v-slot:[slotName]="slotScope">
        <slot :name="slotName" v-bind="slotScope"></slot>
      </template>
    </b-table>
    <b-pagination
      v-model="currentPage"
      :total-rows="rows"
      :per-page="perPage"
    />
  </div>
</template>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM