vxe-table 列表过滤踩坑

news2024/11/27 19:38:37

vxet-table  官网给的案例:https://vxetable.cn/#/table/base/filter

通过设置 filters 属性和 filter-method 方法可以开启列筛选功能,通过 filter-multiple=false 设置为单选
如果是服务端筛选,只需加上 filter-config={remote: true} 和 filter-change 事件就可以实现
如果是动态数据请通过 setFilter 方法更新,参数 filters 不支持动态数据
$panel 对象(查看高级用法):
changeOption(event, checked, option) 更新选项的状态
confirmFilter() 确认筛选
resetFilter() 清除筛选条件

按照官网给的例子,下面说说具体的实现方法:

 过滤一种分为2种,当前的过滤列的类型值确定的和不确定的,一种分为不确定的,比喻: name名称 和 年龄age 就属于不确定的,阔以采用过滤搜索的方式去查询过滤。
另一种就是类型值能确定的,像性别 sex,要不是0 男, 要么是 1 女。这种能确定性的阔以过滤做成checkbox选择后去过滤,当前这里又阔以分为2种,单选和多选。

延申第三种全局搜索过滤方法, 见结尾处。

综上目前就按3种过滤方式来讲解,

1. 过滤的不确定的性的,采用输入框输入值后去查找过滤实现

 

      <vxe-column field="age" title="Age" :filters="[{ data: '' }]" :filter-method="filterAgeMethod">
        <template #filter="{ $panel, column }">
          <input type="type" v-for="(option, index) in column.filters" :key="index" v-model="option.data" @input="$panel.changeOption($event, !!option.data, option)">
        </template>
      </vxe-column>
        filterAgeMethod({ option, row }) {
            return row.age === Number(option.data)
        },

 同样的写法name也能实现:

 

 但是这个过滤输入值必须是跟列表的值必须一致才能查到,没做到模糊查询的功能,根据关键字来过滤并没有实现。

下面提供一下具体实现方法:(关键字来过滤)

        filterNameMethod({ option, row  }) {
            if (row.name.indexOf(option.data) > -1) {
                console.log(row.name)
                return row.name
            }
        },

2. 通过checkbox 过滤的方式来实现
2-1 checkbox
  单选的实现:
添加 :filter-multiple="false" 属性就是单选

 每次只能选中一个去过滤,具体实现方法:

:filters="[{label: 'Man', value: '1'}, {label: 'Woman', value: '0'}]" 

   <vxe-column field="sex" title="Sex" :filters="[{label: 'Man', value: '1'}, {label: 'Woman', value: '0'}]" :filter-multiple="false"></vxe-column>

注意:这里是因为后端返回的  sex 的id  和 value 的id  能对上所以能实现过滤功能。
如果,后端只返回 sex 对应的label 值呢, 你这时候怎么处理?  
sex2: 'Woman',   sex2: 'Man',

 解决方法: 就是把 过滤的数组 filters:数组里面的 label 和value 的值, 都变成一致的 label 值。

:filters="[{label: 'Man', value: 'Man'}, {label: 'Woman', value: 'Woman'}]" 
  <vxe-column field="sex2" title="Sex2" :filters="[{label: 'Man', value: 'Man'}, {label: 'Woman', value: 'Woman'}]" :filter-multiple="false"></vxe-column>

 2-2 checkbox   多选的实现:

 很简单去掉::filter-multiple="false" 属性就是多选

      <vxe-column field="sex3" title="Sex3" :filters="[{label: 'Man', value: '1'}, {label: 'Woman', value: '0'}]"></vxe-column>

注意: 多选如果遇到,后台返回的只有lab值, 无 value 值的情况同单选的处理方法一样,就不写了。

 2-3 checkbox 其他方式  下拉框里面的选择后过滤

注意: 返回值和下拉框选择的值必须一致都是label 的值才可以使用。 

实现方法:

      <vxe-column
        field="sex4"
        title="Sex4"
        :filters="[{ data: '' }]"
        :filter-method="filterSexMethod"
      >
        <template v-slot:filter="{ $panel, column }">
          <select
            v-for="(option, index) in column.filters"
            :key="index"
            v-model="option.data"
            @change="$panel.changeOption($event, !!option.data, option)"
          >
            <option
              v-for="(label, cIndex) in sexList"
              :key="cIndex"
              :value="label"
            >
              {{ label }}
            </option>
          </select>
        </template>
      </vxe-column>
  data() {
    return {
      sexList: ["Man", "Woman"],
}
}

    filterSexMethod({ option, row }) {
      return row.sex4 === option.data
    }

3. 全局过滤筛选方法:

 实现方法如下:

    <el-input v-model="searchs" @change="searchList" clearable style="width: 200px" />
        // 根据数据关键字实现模糊查询功能
        searchList() {
            const keyword = this.searchs
		    const pattern = new RegExp(keyword, 'i'); // 不区分大小写
			let newData = this.tableData.filter(item => {
				return pattern.test(item.name)
			})
            console.log('newData:', newData)
            this.tableData = JSON.parse(JSON.stringify(newData))
		},

目前只是根据 name 去做的全局过滤的,如果想要查询更多列的内容可以在  return pattern.test(item.name) 后面添加: return pattern.test(item.name) || return pattern.test(item.role) ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue页面缓存失效问题解决

文章目录 一、问题背景二、问题排查三、问题解决 一、问题背景 前端技术栈用的是vue&#xff0c;然后用keep-alive组件进行缓存页面【切换页面不进行刷新页面&#xff0c;保留之前的查询条件及状态等等】 测试提bug&#xff1a;部分页面突然缓存失效了&#xff0c;每次切换都…

易基因:全基因组DNA甲基化和小RNA分析揭示甘蓝型油菜种子的基因组不对称性 | 植物发育

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 多倍体是被子植物基因组进化中的一种持续现象&#xff0c;有助于现存开花植物的多样性。甘蓝型油菜&#xff08;Brassica napus&#xff09;是世界上最重要的被子植物油料作物品种之一&a…

2023年系统分析师上午题

全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试 2023年上半年 系统分析师 上午试卷 &#xff08;考试时间 9 : 00&#xff5e;11 : 30 共 150 分钟&#xff09; 1. 在答题卡的指定位置上正确写入你的姓名和准考证号&#xff0c;并用正规 2B 铅笔在你写入…

重命名文件名也可以很优雅,看看这些技巧

文件重命名对于许多工作场景来说是非常重要的。比如&#xff0c;当你需要整理大量文件时&#xff0c;一个好的文件命名系统可以帮助你更轻松地管理和查找文件。但是&#xff0c;当需要重命名大量文件时&#xff0c;逐个重命名显然是非常耗时和繁琐的。这时&#xff0c;批量重命…

mysql-8.0.32 数据库的安装 (Linux)

Linux 中 mysql-8.0.32 数据库的安装 缘步骤常见问题解决方案问题一. mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory解决方案&#xff1a;方案一&#xff08;推荐&#xff09;&#xff1a;方案二&a…

【6 微信小程序学习 - 小程序的组件化开发,通信】

1 小程序组件化开发 2 创建一个组件 1 创建 1,在根目录创建components文件夹,自定义组件都放在此处 2,右键新建component,输入名称后悔创建四个文件 3.其中.json中的"component": true,表示这是一个组件 4,编写代码,和其他代码逻辑相同 2 使用 1,要使用组件的父组…

1:操作系统导论

1.1操作系统的定义 •Anoperatingsystemactsanintermediarybetweenuserofacomputerandthecomputer hardware. ◦ 操作系统充当计算机⽤⼾和计算机硬件之间的中介 •Thepurposeofanoperatingsystemistoprovideanenvironmentinwhichausercanexecute programsinaconvenientandeff…

小红书平台,“松弛感”生活十大趋势报告出炉

放眼时尚、教育、情感、职场等各大领域&#xff0c;继氛围感、仪式感、精致感后&#xff0c;今年都在谈论一个词——松弛感。包括现下轻户外、轻运动、轻解压等风口&#xff0c;也都呼应着年轻人对松弛感的追求。 千瓜数据显示&#xff0c;2023年1月-5月&#xff0c;“松弛感”…

Vue全局事件总线简明笔记

1、作用&#xff1a; 全局事件总线是一种组件间通信的方式&#xff0c;并不是插件&#xff0c;适用于任意组件间通信、实现组件间的通信。 让所有的组件都能访问得到全局事件总线&#xff0c;那么创建的思路就是&#xff0c;全局事件总线一定要让VC或者VM访问得到。 结合组件的…

leetcode24. 两两交换链表中的节点(java)

两两交换链表中的节点 leetcode24. 两两交换链表中的节点題目描述 迭代法.解题思路代码演示 递归法解题思路代码演示 二叉树专题 leetcode24. 两两交换链表中的节点 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/swap-…

全志V3S嵌入式驱动开发(看门狗驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 大家如果做过工业级别的嵌入式设备&#xff0c;那么对看门狗应该不陌生。很多工业级的设备&#xff0c;其应用环境很多时候是非常糟糕的&#xff0…

抖音seo矩阵系统源码开发及部署配置文档分享

一、开发要求及实现流程 &#xff1a;Scope: video.create 需要申请权限 需要用户授权 该接口用于上传视频文件到文件服务器&#xff0c;获取视频文件video_id&#xff08;该 ID 为加密后的 ID&#xff09;。该接口适用于抖音。 注意&#xff1a; 抖音的OAuth API以https://…

阿里云弹性公网ip(EIP)是什么?eip详细介绍

阿里云eip是什么&#xff1f;阿里云百科分享弹性公网IP详细介绍&#xff0c;阿里云弹性公网EIP是什么意思&#xff1f;EIP是可以独立持有的公网IP地址&#xff0c;EIP可以和阿里云专有网络VPC类型的云服务器ECS、NAT网关、ENI网卡、私网负载均衡SLB等绑定&#xff0c;通过EIP可…

chatgpt赋能python:Python是什么

Python是什么 Python是一门高级编程语言&#xff0c;由Guido van Rossum于1991年发明并开发。它具有简单易学、可读性强、跨平台等特点&#xff0c;在Web开发、数据分析、机器学习等领域广泛应用。 Python的文档 Python的文档非常全面&#xff0c;包括官方文档、第三方文档、…

SimSwap复现指引及代码分析【2023有更新】

SimSwap复现指引及代码分析【2023有更新】 0、前言1、复现指引环境配置指引Inference for image or video face swappingInference参数解析Inference用法示例图像视频 2、结果分析3、代码分析 0、前言 论文讲解在&#xff1a;https://blog.csdn.net/qq_45934285/article/detail…

33、js - 事件循环 微任务 宏任务

1、事件循环♻️&#xff08;EventLoop&#xff09; js是单线程语言&#xff0c;也就是某一刻只能执行一行代码&#xff0c;为了让耗时代码不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环是一个并发模型&#xff0c;负责执行代码、收集异步任务的模型&#xff0…

容器(第四篇)创建镜像-dockerfile

创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 基于现有镜像创建&#xff1a; ①先使用现有镜像创建容器 docker run ②再进入容器进行内容更新 docker exec ③最后提交成新的镜像 docker commit 或 docker…

Linux远程管理工具(PuTTY和SecureCRT)

通过《Linux远程管理协议》一节可以知道&#xff0c;Linux远程管理服务器多基于 SSH 协议。本节给大家介绍 2 种常见的基于 SSH 协议的远程管理工具&#xff0c;分别是 PuTTY 和 SecureCRT。 在使用远程管理工具之前&#xff0c;应先设置宿主机 Windows 与虚拟机 Linux 能够连…

mysql 联合查询

mysql联合查询 联合查询&#xff1a;union&#xff0c;将多次查询(多条select语句)的结果&#xff0c;在字段数相同的情况下&#xff0c;在记录的层次上进行拼接。 基本语法 联合查询由多条select语句构成&#xff0c;每条select语句获取的字段数相同&#xff0c;但与字段类…

Seata介绍、原理、配置

目录 介绍&#xff1a; 核心组件&#xff1a; 原理&#xff1a; Seata 会有 4 种分布式事务解决方案&#xff0c;分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式 AT模式原理&#xff1a; 一阶段&#xff1a; 二阶段提交&#xff1a; 二阶段回滚&#xff1a; Seata配置…