环境:

vue@^2.6.10:
vuetify@^2.1.0

我想用v-data-table来显示搜索结果,并在v-data-table中的每一行添加evaluate按钮.

不幸的是,我有两个问题:

  1. 判断按钮不显示
  2. 我不知道如何获取按下按钮的行数据

我需要改变什么?

样板

    <v-data-table
            :headers="headers"
            :items="search_result"
    >
        <template slot="items" slot-scope="row">
            <td>{{row.item.no}}</td>
            <td>{{row.item.result}}</td>
            <td>
                <v-btn class="mx-2" fab dark small color="pink">
                    <v-icon dark>mdi-heart</v-icon>
                </v-btn>
            </td>
        </template>
    </v-data-table>

playbook

data () {
            return {
                headers: [
                    { text: 'no', value: 'no' },
                    { text: 'result', value: 'result' },
                    { text: 'good', value: 'good'},
                ],
                // in real case initial search_result = [], and methods: search function inject below data
                search_result: [{no: 0, result: 'aaa'}, {no:2, result: 'bbb'],
            }
        },

推荐答案

  1. 用于"替换行的默认呈现"的插槽名称是item,而不是items
  2. 将包装<tr>添加到插槽模板中
  3. 只需将@click="onButtonClick(row.item)添加到v-btn,然后创建方法onButtonClick
    <v-data-table :headers="headers" :items="search_result">
      <template v-slot:item="row">
          <tr>
            <td>{{row.item.no}}</td>
            <td>{{row.item.result}}</td>
            <td>
                <v-btn class="mx-2" fab dark small color="pink" @click="onButtonClick(row.item)">
                    <v-icon dark>mdi-heart</v-icon>
                </v-btn>
            </td>
          </tr>
      </template>
    </v-data-table>
methods: {
    onButtonClick(item) {
      console.log('click on ' + item.no)
    }
  }

Note..

...上面的解决方案是用您自己的行渲染替换默认行渲染,所以希望v-data-table个功能中的一些功能可以升级到not work(我没有try ,但我希望行 Select 、分组、就地编辑等都会被 destruct ).如果这是你的问题,这里有一个替代解决方案:

  1. 在标题定义中再添加一列:{ text: "", value: "controls", sortable: false }
  2. 不要覆盖item插槽(行渲染).替代item.controls插槽.注意,"控件"与列定义中的相同——我们只覆盖"控件"列的呈现
  3. 其他一切都一样
    <v-data-table :headers="headers" :items="search_result">
      <template v-slot:item.controls="props">
        <v-btn class="mx-2" fab dark small color="pink" @click="onButtonClick(props.item)">
          <v-icon dark>mdi-heart</v-icon>
        </v-btn>
      </template>
    </v-data-table>

Vue.js相关问答推荐

v-on 的 .native 修饰符仅在组件上有效,但在 标签上使用

如果单元格不可见,则以编程方式打开行的编辑模式. Ag 网格,Vue.js

vuejs vue-cli 如何使用 console.log 而不会出现任何错误

如何将 vuejs 项目部署到 heroku

v-for 内部的组件

Vue-router:循环路由以动态创建

将数据传递给另一条路由上的组件

将自定义部分添加到 v-autocomplete 下拉列表

v-on:submit.prevent 不停止表单提交

即使在客户端设置 Access-Control-Allow-Origin 或其他 Access-Control-Allow-* 标头后也出现 CORS 错误

Vue路由保持活动和挂载行为

Angular 5 中的 功能

在 Vue.js 中,为什么我们必须在导入组件后导出它们?

vuejs挂载生命周期未触发

Vue.js 处理多次点击事件

基于条件的VueJS HTML元素类型

如何将数据传递给 Vue.js 中的路由视图

构建 Vue.js 应用程序时 JavaScript 堆内存不足

Vue.js 中的条件 依赖于props值?

如何在 vue 组件中使用 vuex?