@click:row 未在 v-data-table 中触发(Vuetify)
@click:row not triggered in v-data-table (Vuetify)
我有一个来自 vuetify 的 v-data-table,我有两个点击事件。一个被触发(deleteBooking),另一个没有(booking_clicked)?!该按钮用于删除一个项目。单击行事件是为了向用户显示单击行的附加信息。
<v-data-table
item-key="id"
v-model="selected_bookings"
:loading="isLoading"
:items="tmp_bookings"
:headers="headers"
:single-select="single_select"
:hide-default-footer="true"
@click:row="booking_clicked"
:footer-props="{
'items-per-page-options': [-1]
}"
class="elevation-1">
<template slot="item" slot-scope="row">
<tr>
<td>{{row.item.booking_text}}</td>
<td>
<v-btn class="mx-2" dark small color="red" @click="deleteBooking(row.item)">
<v-icon dark>mdi-delete-forever</v-icon>
</v-btn>
</td>
</tr>
</template>
</v-data-table>
booking_clicked(item){
console.log(item);
}
deleteBooking(booking_item) {
console.log(booking_item);
},
尝试像这样设置行点击:
@click:row="(item) => booking_clicked(item)"
更新
查看我制作的这个codesanbox:https://codesandbox.io/s/stack-70203336-32vby?file=/src/components/DataTableActions.vue
如果您想向 v-data-table
添加额外的列,则无需使用主 ìtem
槽,除非您想修改整行。如果您想做的只是像示例一样添加一个删除按钮。您只需要先将其添加到 headers
数组即可。在我的示例中,我为 actions.
添加了一个额外的列
headers: [
{
text: 'Dessert (100g serving)',
align: 'start',
sortable: false,
value: 'name',
},
{ text: 'Calories', value: 'calories' },
{ text: 'Fat (g)', value: 'fat' },
{ text: 'Carbs (g)', value: 'carbs' },
{ text: 'Protein (g)', value: 'protein' },
{ text: 'Iron (%)', value: 'iron' },
{ text: 'Actions', value: 'actions'}
],
之后,您需要做的就是在 v-data-table
中自定义操作列的插槽。此外,要避免单击删除按钮时的 @click:row
效果,您需要在删除按钮上使用 @click.stop
。
<v-data-table
:headers="headers"
:items="desserts"
:items-per-page="5"
class="elevation-1"
@click:row="(item) => dessertRowlicked(item)"
>
<template #item.actions="{ item }">
<v-icon color="primary" @click.stop="deleteDessert(item)">mdi-delete</v-icon>
</template>
</v-data-table>
我有一个来自 vuetify 的 v-data-table,我有两个点击事件。一个被触发(deleteBooking),另一个没有(booking_clicked)?!该按钮用于删除一个项目。单击行事件是为了向用户显示单击行的附加信息。
<v-data-table
item-key="id"
v-model="selected_bookings"
:loading="isLoading"
:items="tmp_bookings"
:headers="headers"
:single-select="single_select"
:hide-default-footer="true"
@click:row="booking_clicked"
:footer-props="{
'items-per-page-options': [-1]
}"
class="elevation-1">
<template slot="item" slot-scope="row">
<tr>
<td>{{row.item.booking_text}}</td>
<td>
<v-btn class="mx-2" dark small color="red" @click="deleteBooking(row.item)">
<v-icon dark>mdi-delete-forever</v-icon>
</v-btn>
</td>
</tr>
</template>
</v-data-table>
booking_clicked(item){
console.log(item);
}
deleteBooking(booking_item) {
console.log(booking_item);
},
尝试像这样设置行点击:
@click:row="(item) => booking_clicked(item)"
更新
查看我制作的这个codesanbox:https://codesandbox.io/s/stack-70203336-32vby?file=/src/components/DataTableActions.vue
如果您想向 v-data-table
添加额外的列,则无需使用主 ìtem
槽,除非您想修改整行。如果您想做的只是像示例一样添加一个删除按钮。您只需要先将其添加到 headers
数组即可。在我的示例中,我为 actions.
headers: [
{
text: 'Dessert (100g serving)',
align: 'start',
sortable: false,
value: 'name',
},
{ text: 'Calories', value: 'calories' },
{ text: 'Fat (g)', value: 'fat' },
{ text: 'Carbs (g)', value: 'carbs' },
{ text: 'Protein (g)', value: 'protein' },
{ text: 'Iron (%)', value: 'iron' },
{ text: 'Actions', value: 'actions'}
],
之后,您需要做的就是在 v-data-table
中自定义操作列的插槽。此外,要避免单击删除按钮时的 @click:row
效果,您需要在删除按钮上使用 @click.stop
。
<v-data-table
:headers="headers"
:items="desserts"
:items-per-page="5"
class="elevation-1"
@click:row="(item) => dessertRowlicked(item)"
>
<template #item.actions="{ item }">
<v-icon color="primary" @click.stop="deleteDessert(item)">mdi-delete</v-icon>
</template>
</v-data-table>