我bootstrap-vue在我的应用程序中使用,并且我有很多表,它们都具有相同的样板代码。以下是该样板的示例:
<b-table
:items="someItemList"
:busy="someItemList === null"
:empty-text="$t('notFound')"
:empty-filtered-text="$t('notFound')"
no-sort-reset
show-empty
striped
hover
>
<div slot="table-busy" class="text-center my-3">
<b-spinner class="align-middle"/>
</div>
</b-table>
Run Code Online (Sandbox Code Playgroud)
我当然想把这个样板分解成某种通用模块,比如自定义组件,这样我的新表的起点看起来更像这样:
<my-awesome-table :items="someItemList">
</my-awesome-table>
Run Code Online (Sandbox Code Playgroud)
最终,我想表现得像my-awesome-table一个普通的b-table,但是所有这些样板都已经设置好了,我仍然可以根据需要设置额外的道具和插槽。
但是,我想不出一种方法来完成这项工作。我试过了:
b-tableb-table组件,但是我很难设置 prop 和 slot 值,因为我已经在我的样板模板中设置了它们如何创建允许我为道具和插槽设置默认值的自定义组件?
ton*_*y19 13
如果你更喜欢模板,你可以像这样创建一个包装器组件:
<b-table v-bind="$attrs" ...>
Run Code Online (Sandbox Code Playgroud)
v-on给$listenerson b-table,它附加来自父级的任何事件侦听器<b-table v-on="$listeners" ...>
Run Code Online (Sandbox Code Playgroud)
b-table:<b-table ...>
<template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
<slot :name="slot" v-bind="scope" />
</template>
</b-table>
Run Code Online (Sandbox Code Playgroud)
结果应该类似于:
<template>
<b-table
your-prop-a
your-prop-b
your-prop-c
v-bind="$attrs"
v-on="$listeners"
>
<template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope">
<slot :name="slot" v-bind="scope" />
</template>
</b-table>
</template>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |