如何使用 vxe-table 的筛选功能来自定义模板,自定义筛选为文本框的使用方法

如何使用 vxe-table 的筛选功能来自定义模板,自定义筛选为文本框的使用方法,默认的筛选功能是列表勾选筛选,当产品要求实现在筛选框中放个输入框时,可以通过自定义插槽模板来实现该功能。

https://vxetable.cn

先来看一下默认的筛选列表是

通过 filters 开启筛选功能

图片

自定义筛选为文本框

筛选模板,使用插槽 filter 来自定义模板,该功能的强大之处是可以放任意的 vue 组件,样式都可以自定义;

参数说明(filters可以设置多个,比如多个文本框;其中 data就是用来双向绑定文本框的值):
filters: [
{ data: '' }
]

图片

<template>
  <div>
    <vxe-grid ref="gridRef" v-bind="gridOptions">
      <template #name_filter="{ column }">
        <vxe-input v-model="option.data" v-for="(option, index) in column.filters" :key="index" @change="changeNameFilterEvent(option)"></vxe-input>
      </template>
    </vxe-grid>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'

const gridRef = ref()

const gridOptions = reactive({
  border: true,
  columns: [
    { type: 'checkbox', width: 60 },
    {
      field: 'name',
      title: 'Name',
      filters: [
        { data: '' }
      ],
      filterMethod ({ option, cellValue }) {
        return `${cellValue}`.toLowerCase().indexOf(`${option.data || ''}`.toLowerCase()) > -1
      },
      slots: {
        filter: 'name_filter'
      }
    },
    { field: 'sex', title: 'Sex' },
    { field: 'num', title: 'Number' },
    { field: 'age', title: 'Age' },
    { field: 'address', title: 'Address' }
  ],
  data: [
    { id: 10001, name: 'Test1', role: 'Develop', sex: '0', age: 28, num: 234, address: 'test abc' },
    { id: 10002, name: 'Test2', role: 'Test', sex: '1', age: 22, num: 34, address: 'Guangzhou' },
    { id: 10003, name: 'Test3', role: 'PM', sex: '0', age: 32, num: 12, address: 'Shanghai' }
  ]
})

const changeNameFilterEvent = (option) => {
  const $grid = gridRef.value
  if ($grid) {
    $grid.updateFilterOptionStatus(option, !!option.data)
  }
}
</script>

https://gitee.com/x-extends/vxe-table

posted @ 2026-01-15 16:43  放飞的云  阅读(0)  评论(0)    收藏  举报