SAS*_*ROG 5 datatable vue.js vuetify.js
我正在尝试制作一个可重用的 vuetify 数据表。如果我愿意的话,我希望能够传递动态槽或项目槽,并且两者都应该有效。这是代码
<v-data-table
:headers="headers"
:items="items"
:dense="dense"
:hide-default-header="hideDefaultHeader"
:loading="loading"
:options.sync="settings"
:items-per-page="itemsPerPage"
:server-items-length="itemLength"
@click:row="handleClick"
:height="height"
>
<-- 1st part-->
<template v-for="field in slots" v-slot:[field.field]="{ item }">
<slot :name="field.field" :item="item"></slot>
</template>
<-- 2nd part -->
<template v-slot:item="{item}">
<slot name="item" v-bind="item"></slot>
</template>
</v-data-table>
Run Code Online (Sandbox Code Playgroud)
然后创建一个组件,DataTable然后我像这样使用它
<DataTable
v-if="tabs == n"
:items="items"
:loading="loading"
:headers="headers"
:options="serverOptions"
:slots="slots"
:total="toatl"
@updateOptions="updateOptions($event, n)"
>
Run Code Online (Sandbox Code Playgroud)
我也有一个像这样的插槽数组
slots: [{ field: "item.CREATOR" }, { field: "item.BODY" }]
Run Code Online (Sandbox Code Playgroud)
我希望能够使用item槽位数组2nd part或使用槽位数组中定义的特定列槽位1st part。现在是动态插槽,除非我注释掉2nd part. 这就是我目前对每个部分进行定位的方式
第 1 部分:
<template v-slot:item.CREATOR="{ item }">
<strong>{{item.FIRSTNAME}} {{item.LASTNAME}}</strong>
</template>
Run Code Online (Sandbox Code Playgroud)
第二部分:
<template v-slot:item="item">
<tr>
<td>{{item.MESSAGESTATUS}}</td>
<td>sdsd</td>
<td>sfsf</td>
</tr>
</template>
Run Code Online (Sandbox Code Playgroud)
yur*_*uri 10
使用您想要的动态槽的计算属性可以轻松解决您尝试做的事情:
computed: {
creatorSlots: function () {
//Filters the slots of type CREATOR
return this.slots.filter(slot => slot.field==='CREATOR');
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在您可以将第一部分用于插槽阵列上的每个“CREATOR”插槽:
<template v-for="(slot,i) in creatorSlots" v-slot:[`item.${slot.field}`]="{ item }">
<strong :key="i">{{item.FIRSTNAME}} {{item.LASTNAME}}</strong>
</template>
Run Code Online (Sandbox Code Playgroud)
如果您有其他插槽需要以其他方式处理,您只需为其他插槽使用另一个计算属性并重复该过程...
computed: {
bodySlots: function () {
//Filters the slots of type BODY
return this.slots.filter(slot => slot.field==='BODY');
}
}
Run Code Online (Sandbox Code Playgroud)
<template v-for="(slot,i) in bodySlots" v-slot:[`item.${slot.field}`]="{ item }">
<tr>
<td>{{item.MESSAGESTATUS}}</td>
<td>sdsd</td>
<td>sfsf</td>
</tr>
</template>
Run Code Online (Sandbox Code Playgroud)
希望它有帮助,我来到这里遇到了类似的问题,我用这种方法解决了。
| 归档时间: |
|
| 查看次数: |
5658 次 |
| 最近记录: |