vue.js - Vuetify 在数据表中插入操作按钮并获取行数据
问题描述
环境:
vue@^2.6.10:
vuetify@^2.1.0
我想用来v-data-table
显示搜索结果并在v-data-table
.
不幸的是我有两个问题:
- 未显示评估按钮
- 我不知道如何获取按下按钮的行数据
我需要改变什么?
模板
<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>
脚本
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'],
}
},
解决方案
- 用于“替换行的默认呈现”的插槽名称是
item
,不是items
- 将包装添加
<tr>
到插槽模板中 - 只需添加
@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)
}
}
笔记..
...上面的解决方案是用您自己的替换默认行渲染,因此预计某些v-data-table
功能将不起作用(没有尝试,但我希望行选择、分组、就地编辑等会被破坏)。如果这对您来说是个问题,这里是替代解决方案:
- 在标题定义中再添加一列:
{ text: "", value: "controls", sortable: false }
- 不要覆盖
item
插槽(行渲染)。而是覆盖item.controls
插槽。注意“控件”与列定义中的相同 - 我们仅覆盖“控件”列的呈现 - 其他一切都一样
<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>
推荐阅读
- cvs - CVS 不更新 TOAD
- selenium-webdriver - 在 selenium 网格上运行时,项目使用旧版本的 chrome,但是当在同一台机器上没有网格运行时,它运行良好
- xamarin - 行内网格定义自动高度和堆栈布局的奇怪行为
- c# - 统一从图库中选择多个图像
- java - 如何从网络选项卡中的 DOM 结构中获取承载令牌 - 使用 Selenium?
- phalcon - Phalcon - 如何组织 RESTFul 应用程序
- firebase - 无法将哈希映射值作为 ArrayList
- javascript - 无法通过 webdriverI-O 启动浏览器
- mysql - 检查密码是否正确,在数据库中对 md5 进行哈希处理
- javascript - 如何避免在 javascript 中使用 Media Recorder 录制滞后