如何使用自定义过滤器功能过滤 b 表行?

t_p*_*prz 7 vue.js bootstrap-vue

我正在尝试使用自定义过滤器函数过滤掉 bootstrap-vue 表中的一些行。

我编写了一个函数,它接受两个参数 - 一个行对象和一个空的过滤器参数,并返回 true 或 false,如文档中所示

我尝试使用thisthis答案中提供的代码,但它们也不起作用。

我也尝试放入console.log(row, filter)filterTable 方法,但它没有向控制台写入任何内容。

<template>
  <div>
    <b-table 
      striped hover 
      :items="items" 
      :filter=null 
      :filter-function="filterTable"></b-table>
  </div>
</template>
Run Code Online (Sandbox Code Playgroud)
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) {
        if (row.age >= 40) {
          return false;
        } else {
          return true;
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

它应该显示小于 40 岁的人,但它显示了所有记录。

Jns*_*Jns 13

您传递给过滤器函数的条件必须放在过滤器属性上才能起作用。例如,您可以criteria向数据对象添加一个新属性,并将其分配给:filter。该filter属性需要 String、RegExp、Object 或 Array 类型的值。如果您为其分配一个编号,则会收到警告。过滤器函数的标准将作为第二个参数传递。

请参阅下面的示例:

new Vue({
  el: "#app",
  data() {
    return {
      criteria: "40",
      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, filter) {
      if (row.age >= filter) {
        return false;
      } else {
        return true;
      }
    }
  }
})
Run Code Online (Sandbox Code Playgroud)
<link href="https://unpkg.com/bootstrap-vue@2.0.0-rc.21/dist/bootstrap-vue.css" rel="stylesheet" />
<link href="https://unpkg.com/bootstrap@4.3.1/dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.0.0-rc.21/dist/bootstrap-vue.js"></script>

<div id="app">
  <div>
    <b-table striped hover :items="items" :filter="criteria" :filter-function="filterTable">
    </b-table>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)