【问题标题】:@click:row not triggered in v-data-table (Vuetify)@click:row 未在 v-data-table (Vuetify) 中触发
【发布时间】:2022-01-09 04:10:21
【问题描述】:

我有一个来自 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);
},

【问题讨论】:

    标签: vue.js vuetify.js v-data-table


    【解决方案1】:

    尝试像这样设置行点击:

    @click:row="(item) => booking_clicked(item)"
    

    更新

    检查我制作的这个代码框: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>
    

    【讨论】:

    • 没用 :(
    • 我会为您制作一个代码框,我认为您还可以改进添加删除按钮的方式。无需使用自定义物品栏。
    • 它工作正常。所以我将答案标记为已接受的答案。但我现在收到警告:'v-slot' 指令不支持任何修饰符。
    • 是的,这是使用 vuetify 插槽时发生的常见 eslint 警告。您可以在 questiongithub 帖子中了解更多相关信息。您可以通过多种方式修复警告,我只是在我的 eslint 配置文件中设置 'vue/valid-v-slot': 'off'
    猜你喜欢
    • 2020-02-26
    • 2019-11-10
    • 2020-12-13
    • 2019-11-19
    • 1970-01-01
    • 2021-04-21
    • 2018-01-21
    • 2020-02-02
    • 2021-02-11
    相关资源
    最近更新 更多