【问题标题】:Vue - how can i add a button to each row in a Vuetify datatable?Vue - 如何在 Vuetify 数据表的每一行中添加一个按钮?
【发布时间】:2020-12-26 20:54:32
【问题描述】:

我是 Vue 的新手,我正在处理数据表。我正在使用 Vuetify 的数据表来创建一个组件,该组件在页面加载时向我的后端发送请求,接收一些数据并在数据表上显示该数据。

这是我当前的代码:

<template>
  <v-data-table
    :headers="headers"
    :items="balances"
    :items-per-page="5"
    class="elevation-1"
  ></v-data-table>
</template>

<script>


export default {
 
  data() {
    return {

      search: '',

      headers: [
        { text: 'Asset', value: 'symbol' },
        { text: 'Amount', value: 'amount' },
      ],

        balances: [],
    }
  },
  mounted() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      fetch('MYURL')
        .then(response => response.json())
        .then(data => {
          this.balances = data;
        })
    }
  }
}

</script>

我现在面临的问题是为表格中的每一行添加一个按钮,并且这个按钮应该向我的后端发送一个包含该行数据的请求,所以我需要添加一个按钮,当点击该按钮时,可以获取行的数据。有没有办法做到这一点?我尝试查看 Vuetify 的文档,但我没有找到很多关于这样的任务的信息。

【问题讨论】:

标签: vue.js vuetify.js


【解决方案1】:

您可以添加一个新列,例如将值设置为action,然后在表格中添加一个slot,如下所示:

new Vue({
  el:"#app",
  vuetify: new Vuetify(),
  data() {
    return {
      search: '',
      headers: [
        { text: 'Asset', value: 'symbol' },
        { text: 'Amount', value: 'amount' },
        { text: 'Send', value: 'action' }
      ],
      balances: [
        { symbol: "$", amount: 100 },
        { symbol: "$", amount: 200 },
      ],
    }
  },
  methods: {
    sendRequest(rowData) {
      console.log(rowData)
    }
  }
});
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script><link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">

<v-app id="app">
  <v-data-table
    :headers="headers"
    :items="balances"
    :items-per-page="5"
    class="elevation-1"
  >
    <template v-slot:item.action="{ item }">
      <v-btn @click="sendRequest(item)">
        Send
      </v-btn>
    </template>
  </v-data-table>
</v-app>

【讨论】:

  • 非常感谢您的回答!我收到以下错误:无法安装组件:未定义模板或渲染功能。我认为这可能是我在组件内部拥有的实际表格,因此所有内容都需要由 包装
  • @JayK23 不客气,如果您满意,请将答案标记为解决方案。是的,在您的情况下,将组件包裹在 template 中,我只是将其删除以显示一个快速示例。如果您遇到更多问题,请随时分享更详细的小提琴
  • 只能取headers和表内slot中新对象的部分
  • 好吧,抱歉我的回答令人困惑,基本上因为我是 Vue 新手,我担心使用两次
猜你喜欢
  • 2020-08-13
  • 2021-01-16
  • 2014-04-23
  • 2012-05-04
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
相关资源
最近更新 更多