vue.js - 按 2 个或更多字段过滤 BootstrapVue 表

标签 vue.js bootstrap-vue

我正在使用 Bootstrap-Vue 在表格中显示信息。显示的每个元素都有两个字段(名称和年龄)。到目前为止,我可以按一个字段(姓名或年龄)进行过滤,但我希望有两个输入可以同时按它们进行过滤。

因此,如果我在姓名处键入“Dav”并在年龄处键入“2”,我想显示所有姓名为“Dav”且年龄为“2”的人。

我试过将一个数组 (['age', 'name']) 和一个对象 (name: 'name', age:'age') 传递给 :filter,但没有任何效果。

我 fork 了一个例子并简化了它。在这里您将有两个输入,一个用于姓名,另一个用于年龄。您可以按名称过滤(:filter="name"),但不能按年龄过滤。我可以将“年龄”切换为“姓名”,它会起作用,但仅适用于“年龄”。

代码如下:

[https://jsfiddle.net/esom2f9p/2/][1]

TL;DR:表格按“姓名”过滤,但应按“姓名”和“年龄”过滤。我想知道如何按两个或更多字段进行过滤。

最佳答案

我使用了计算字段和过滤函数属性

<b-table bordered show-empty striped stacked="md" no-provider-filtering 
class="management-list" ref="table"
v-model="filteredItems"
:items="tableItems"
:fields="fields"
:current-page="currentPage"
:per-page="perPage"
:filter="filter"
:filter-function="filterTable"
:sort-by.sync="sortBy"
:sort-desc.sync="sortDesc"
@filtered="onFiltered">
</b-table>

当所有变量都为空时,将过滤器设置为空。如果至少有一个不为空,则将其设置为一个数组。在我的示例中,我只使用了 2 个变量。

computed: {
    filter: function() {
        if (this.filterVarOne === null && this.filterVarTwo ===  null){
            return null;
        }

        return [this.filterVarOne , this.filterVarTwo];
    }
},

然后当设置其中一个变量时将调用过滤器函数。

methods: {
    filterTable: function(tableRow, filter){
        if (filter[0] !== null && filter[1] !== null){
            //both filters set
            return tableRow.columnOne == filter[0] && 
                   tableRow.columnTwo == filter[1];
         }
        else {
            return tableRow.columnOne == filter[0] ||
                tableRow.columnTwo == filter[1];
        }

    }
},

来自 bootstrap vue 文档

过滤器函数将传递两个参数:

原始项目行记录数据对象。将此参数视为只读。 filter prop 的内容(可以是字符串、RegExp、数组或对象)

关于vue.js - 按 2 个或更多字段过滤 BootstrapVue 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55745897/

相关文章:

javascript - 如何用换行符替换值并以 b-modal 形式显示它(带换行符)

vue.js - 安装 VueJS CLI 时如何修复 npm WARN 已弃用错误

javascript - VueJS 路由中 "component: () => import()"的替代方案

javascript - Vue.js 的引导表/分页中的数据问题

javascript - 如何将函数作为 Prop 传递给子组件并在 Vue 中从那里调用它?

css - Vuetify 中的 BootstrapVue b-form-checkbox&radio 垂直中心?

vue.js - WebStorm 模块未安装 webpack 报错

vue.js - Vue/Nuxt - 在渲染整个 View 后运行代码?

javascript - 从 vue 中的子组件访问 key

javascript - 使用 Bootstrap Vue 在 Vue JS 上单击选项卡后如何加载组件?