gpt4 book ai didi

vue.js - Vue.Draggable 能否与 Vuetify v-data-table 一起使用并允许使用表 v-slot :item.

转载 作者:行者123 更新时间:2023-12-05 09:06:26 25 4
gpt4 key购买 nike

验证 v-data-table支持多种类型的插槽:v-slot:body , v-slot:itemv-slot:item.<name> .

我们一直在使用v-slot:item.<name>广泛,因为它们提供了一种灵活的方式来设计和处理各个列中的内容,并允许以编程方式更改表标题。

我想为我的 v-data-table 添加可拖动性行并使用 Vue.Draggable 使其正常工作.

然而 draggable组件需要使用 v-data-table v-slot:body即控制了整个 table ,从而失去了 v-slot:item.<name> 的灵 active 。 .

有没有办法将这两个组件一起使用并提供v-slot:item.<name>支持吗?

最佳答案

我创建了一个 DataTableRowHandler允许 v-slot:item.<name> 的组件支持。

这是放在 draggable 里面的组件,插入表 <tr>元素并提供相同的“标题”数组以插入 <td>元素和 v-slot:item.<name>条目。如果没有 v-slot:item.<name>被定义然后单元格值被输出,以与v-data-table相同的方式有效。

下面是示例组件用法:

<v-data-table
ref="myTable"
v-model="selected"
:headers="headers"
:items="desserts"
item-key="name"
class="elevation-1"
>
<template v-slot:body="props">
<draggable
:list="props.items"
tag="tbody"
:disabled="!allowDrag"
:move="onMoveCallback"
:clone="onCloneCallback"
@end="onDropCallback"
>
<data-table-row-handler
v-for="(item, index) in props.items"
:key="index"
:item="item"
:headers="headers"
:item-class="getClass(item)"
>
<template v-slot:item.lock="{ item }">
<v-icon @click="item.locked = item.locked ? false : true">{{
item.locked ? "mdi-pin-outline" : "mdi-pin-off-outline"
}}</v-icon>
</template>

<template v-slot:item.carbs="{ item }">
{{ item.carbs }}
<v-icon>{{
item.carbs > 80
? "mdi-speedometer"
: item.carbs > 45
? "mdi-speedometer-medium"
: "mdi-speedometer-slow"
}}</v-icon>
</template>
</data-table-row-handler>
</draggable>
</template>
</v-data-table>

这是 DataTableRowHandler组件代码

<template>
<tr :class="getClass">
<td v-for="(header, index) in headers" :key="index">
<slot :item="item" :name="columnName(header)">
<div :style="getAlignment(header)">
{{ getNonSlotValue(item, header) }}
</div>
</slot>
</td>
</tr>
</template>

<script>
export default {
name: "DataTableRowHandler",
components: {},
props: {
itemClass: {
type: String,
default: "",
},
item: {
type: Object,
default: () => {
return {};
},
},
headers: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {};
},
computed: {
getClass() {
return this.itemClass;
}
},
methods: {
columnName(header) {
return `item.${header.value}`;
},
getAlignment(header) {
const align = header.align ? header.align : "right";
return `text-align: ${align}`;
},
getNonSlotValue(item, header) {
const val = item[header.value];

if (val) {
return val;
}

return "";
},
},
};
</script>

它的一个使用示例在这个 codesandbox link 中。

关于vue.js - Vue.Draggable 能否与 Vuetify v-data-table 一起使用并允许使用表 v-slot :item. <name>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66090612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com