如何使用 vxe-table 的筛选功能来自定义模板,自定义筛选为文本框的使用方法
如何使用 vxe-table 的筛选功能来自定义模板,自定义筛选为文本框的使用方法,默认的筛选功能是列表勾选筛选,当产品要求实现在筛选框中放个输入框时,可以通过自定义插槽模板来实现该功能。
先来看一下默认的筛选列表是
通过 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>
浙公网安备 33010602011771号