【问题标题】:Vue.js - How do I display row specific data using vuetify data table via icon click?Vue.js - 如何通过图标单击使用 vuetify 数据表显示行特定数据?
【发布时间】:2020-12-13 13:33:15
【问题描述】:

我有一个显示订单数据的 Vuetify 数据表。每行的最后一列是一个图标,用户可以单击以取消他们的订单。当用户单击取消图标时,系统会提示他们确认取消订单叠加层,其中显示 order id

我遇到的问题是,当我的叠加层打开时,order_id 不会根据我单击的行进行更新。它似乎显示了我在数据表中显示的项目数组中的第一个 order_id

我为数据表中的每一行使用一个唯一的itemKey

我做错了什么导致我无法显示每个订单的特定行数据?

<v-data-table
  v-if="orders.length > 0"
  :headers="headers"
  :items="orders"
  multi-sort
  :search="search"
  class="elevation-1"
 >
<template v-slot:[`item.length`]="{ item }">
 <span>{{item.length | transform}}</span>
</template>
<template v-slot:[`item.weight`]="{ item }">
 <span>{{item.weight | transform}}</span>
</template>
<template  v-slot:[`item.actions`]="{ item }">
 <v-icon small @click="cancelOverlay = true" color="red">mdi-cancel</v-icon>
 <v-overlay v-if="cancelOverlay">
  <v-card light color="#f6f9fc" max-width="1000px">
   <v-card-title primary-title>
    <div>
     <span class="display-1 mb-0 black--text">Are you sure you want to cancel order #{{item.order_id}}?</span>
    </div>
    <v-spacer></v-spacer>
    <v-btn icon dark color="black" @click="cancelOverlay = false">
     <v-icon>mdi-close</v-icon>
    </v-btn>
   </v-card-title>
   <v-container>
    <CancelOrderComponent :orderId="item.order_id" />
   </v-container>
  </v-card>
 </v-overlay>
</template>
</v-data-table>

【问题讨论】:

  • 你指的是哪个点击?
  • 每行中的取消图标。行本身不可选择

标签: javascript vue.js vuejs2 vue-component vuetify.js


【解决方案1】:

CancelOrderComponent 应该在v-data-table 组件之外,并添加另一个名为currentOrderId 的数据属性,并使用该点击事件@click="cancelOverlay = true; currentOrderId=item.order_id;" 对其进行更新,并将其重置为@click="cancelOverlay = false; currentOrderId=-1;"

<v-data-table
....
<template  v-slot:[`item.actions`]="{ item }">
 <v-icon small @click="cancelOverlay = true; currentOrder=item;" color="red">mdi-cancel</v-icon>
 <v-overlay v-if="cancelOverlay">
  <v-card light color="#f6f9fc" max-width="1000px">
   <v-card-title primary-title>
    <div>
     <span class="display-1 mb-0 black--text">Are you sure you want to cancel order #{{currentOrder.order_id}}?</span>
    </div>
    <v-spacer></v-spacer>
    <v-btn icon dark color="black" `@click="cancelOverlay = false; currentOrder=null;"`>
     <v-icon>mdi-close</v-icon>
    </v-btn>
   </v-card-title>
    <v-container>
    <CancelOrderComponent :orderId="currentOrder.order_id" />
   </v-container>
  </v-card>
 </v-overlay>
</template>
</v-data-table>
 
...

脚本:

data(){
  return{
    currentOrder: null,
   }

}

【讨论】:

  • 这不是我想要的。我仍然希望取消订单组件仅在单击取消图标时显示。您的解决方案仍然引导我解决我的问题。我已经用对我有用的方法编辑了你的答案
  • 我批准了您的修改,我只是给出了第一个解决方案,我一直在等待您的反馈以改进它
猜你喜欢
  • 2018-03-21
  • 2015-05-02
  • 2020-04-06
  • 1970-01-01
  • 2020-09-26
  • 2019-12-02
  • 2021-12-31
  • 2023-03-16
  • 2019-10-26
相关资源
最近更新 更多