You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用自定义过滤函数筛选bootstrap-vue的b-table行?函数未生效

解决Bootstrap-Vue b-table自定义过滤函数不生效的问题

嘿,我发现你的问题啦!你写的过滤逻辑本身没问题,但Bootstrap-Vue的b-table有个小规则你没注意到:只有当filter属性的值不是null/undefined这类假值的时候,才会触发自定义的filter-function。你现在设置了:filter=null,组件会直接跳过过滤流程,所以你的filterTable方法根本没被调用,控制台自然也没输出,所有行都原样显示了。

下面给你两种可行的解决办法:

方法一:给filter设置一个非空占位值

只需要把:filter=null改成一个非假值(比如空字符串'',或者任意非null的值),就能触发过滤函数了:

<template>
  <div>
    <!-- 用空字符串作为filter的占位值 -->
    <b-table striped hover :items="items" :filter="''" :filter-function="filterTable"></b-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
        { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
        { age: 89, first_name: 'Geneva', last_name: 'Wilson' },
        { age: 38, first_name: 'Jami', last_name: 'Carney' }
      ]
    }
  },
  methods: {
    filterTable(row) {
      console.log(row); // 现在控制台能正常输出了
      return row.age < 40; // 简化你的判断逻辑
    }
  }
}
</script>

方法二:用计算属性提前过滤数据

如果你的过滤条件是固定的,不需要根据用户输入动态变化,直接用computed属性处理数据源会更直观,也不用依赖b-table的过滤机制:

<template>
  <div>
    <b-table striped hover :items="filteredItems"></b-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
        { age: 21, first_name: 'Larsen', last_name: 'Shaw' },
        { age: 89, first_name: 'Geneva', last_name: 'Wilson' },
        { age: 38, first_name: 'Jami', last_name: 'Carney' }
      ]
    }
  },
  computed: {
    filteredItems() {
      // 直接返回符合条件的行
      return this.items.filter(row => row.age < 40);
    }
  }
}
</script>

两种方法都能实现你要的“只显示40岁以下人员”的效果,选哪种看你的实际需求~

内容的提问来源于stack exchange,提问作者t_prz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:57:00