vue.js - Bootstrap-vue b-table,标题中带有过滤器
问题描述
我有一个用 bootstrap-vue 生成的表,它显示了系统搜索的结果。
结果表向用户显示记录,用户可以对它们进行排序和过滤。
如何在使用 bootstrap-vue元素<th>
生成的表头下方添加搜索字段?<b-table>
解决方案
您可以使用该top-row
插槽来自定义您自己的第一行。请参阅下面的简单示例。
new Vue({
el: '#app',
data: {
filters: {
id: '',
issuedBy: '',
issuedTo: ''
},
items: [{id:1234,issuedBy:'Operator',issuedTo:'abcd-efgh'},{id:5678,issuedBy:'User',issuedTo:'ijkl-mnop'}]
},
computed: {
filtered () {
const filtered = this.items.filter(item => {
return Object.keys(this.filters).every(key =>
String(item[key]).includes(this.filters[key]))
})
return filtered.length > 0 ? filtered : [{
id: '',
issuedBy: '',
issuedTo: ''
}]
}
}
})
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css"/><link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"/><script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script><script src="//unpkg.com/babel-polyfill@latest/dist/polyfill.min.js"></script><script src="//unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<b-table striped show-empty :items="filtered">
<template slot="top-row" slot-scope="{ fields }">
<td v-for="field in fields" :key="field.key">
<input v-model="filters[field.key]" :placeholder="field.label">
</td>
</template>
</b-table>
</div>
注意:我使用计算属性来过滤项目而不是:filter
道具,b-table
因为如果所有项目都被过滤掉,包括您的自定义第一行,它就不会呈现行。这样,如果结果为空,我可以提供一个虚拟数据行。
推荐阅读
- android - 无法解析符号“菜单”?
- android - 使用 Kotlin 处理错误 RXJava Android
- python - 如何在python中用两个点topLeft点(0,0)和bottomRight点(1,1)初始化一个矩形类?
- python - 如何在 Python 字符串中写入原始字节字符?
- java - java中需要println命令
- android - android studio 3.2 读取密钥失败
- javascript - 如何在 ChartJS 中使用数组存储数据?
- cordova - 使用带有 Cordova 的 Deezer SDK 无法播放超过 30 秒的音乐
- iis - 同一域上的应用程序之间的 ASP 核心导航
- assembly - PDP-11 汇编器:“单操作数指令”如何工作