vxe-table 動態列篩選,以及篩選項動態變化的解決方案記錄

需求場景:

  1. table 的列是由接口動態返回的;
  2. 列的篩選項就是數據的值,比如【姓名】這個字段總共有三個值,那么姓名這一列的篩選項就是這三個值本身;
  3. 當有一列篩選后,其他列的篩選項也要動態變化。

vxe-table 版本:4.9.14

完整代碼如下:
vue template 部分:

<vxe-tableref="vxeTableRef":data="state.tableData"height="100%"border@filter-change="handleFilterChange"><vxe-columnv-for="colOpt in columnsOptions":key="colOpt.field":field="colOpt.field":title="colOpt.title"align="center"resizablesortable:filters="colOpt.filters":filter-method="colOpt.filterMethod"/></vxe-table>

script 部分:

<script setup lang="ts">
// 其他代碼
const vxeTableRef = ref();const handleSearch = () => {// 獲取table數據部分的邏輯API(params).then((res: any) => {// ...state.tableData = data || [];if (state.tableData.length > 0) {// 在數據加載后重置所有篩選nextTick(() => {if (vxeTableRef.value) {vxeTableRef.value.clearFilter();}});}});
}// 下面是處理列篩選的邏輯
// 獲取篩選選項
const getColumnFilters = (column: string) => {// 使用 Map 來提高性能const uniqueMap = new Map();for (const row of state.tableData) {const value = row[column];if (!uniqueMap.has(value)) {uniqueMap.set(value, {label: value == null || value == "" ? "(空)" : String(value),value: value,checked: false});}}return Array.from(uniqueMap.values());
};// 創建篩選方法
const createFilterMethod = (column: string) => {return ({ value, row }: { value: any; row: any }) => {const cellValue = row[column];// 處理空值的情況if (value === null || value === "") {return cellValue === null || cellValue === "";}// 如果單元格值是數字,進行數字比較if (typeof cellValue === "number") {return cellValue === Number(value);}// 默認進行字符串比較return String(cellValue) === String(value);};
};// 數據是異步加載的,使用計算屬性來處理列配置
const columnsOptions = computed(() => {return state.columns.map(col => ({field: col,title: col,filters: getColumnFilters(col),filterMethod: createFilterMethod(col)}));
});// 處理篩選變化
const handleFilterChange = (params: any) => {// 獲取當前表格中可見的行數據const { filterList } = params;// 如果沒有篩選項,就刷新if (!filterList || filterList.length === 0) {handleSearch();}// 篩選已經應用,獲取處理后的可見數據const visibleData = vxeTableRef.value?.getTableData().visibleData || [];// 獲取當前被篩選的列,避免修改它們的篩選項const filteredColumns = new Set(filterList.map((item: any) => item.field));// 更新篩選狀態nextTick(() => {// 只更新未被篩選的列state.columns.forEach(column => {// 跳過當前正在篩選的列if (filteredColumns.has(column)) return;// 為此列生成新的篩選選項,但僅從可見數據中獲取const uniqueMap = new Map();for (const row of visibleData) {const value = row[column];if (!uniqueMap.has(value)) {uniqueMap.set(value, {label: value == null || value === "" ? "(空)" : String(value),value: value,checked: false});}}// 更新此列的篩選項if (vxeTableRef.value) {vxeTableRef.value.setFilter(column, Array.from(uniqueMap.values()));}});});
};
</script>

里面關鍵的一個點在于,vxe-table 篩選后的展示數據跟我們的源數據是分開的,所以篩選觸發的事件中,我們應該拿 visibleData 來做篩選項的動態處理。

由于邏輯可復用,所以記錄一下,需要用的時候直接copy就好了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901695.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5游戲分辨率設置和窗口模式

第一種方法: 在項目配置Config文件夾下新建 DefaultGameUserSettings.ini 輸入代碼 [/Script/Engine.GameUserSettings] bUseVSyncFalse ResolutionSizeX1960 ResolutionSizeY1080 LastUserConfirmedResolutionSizeX800 LastUserConfirmedResolutionSizeY600 WindowPosX-1 …

鏈表知識回顧

類型&#xff1a;單鏈表&#xff0c;雙鏈表、循環鏈表 存儲&#xff1a;在內存中不是連續存儲 刪除操作&#xff1a;即讓c的指針指向e即可&#xff0c;無需釋放d&#xff0c;因為java中又內存回收機制 添加節點&#xff1a; 鏈表的構造函數 public class ListNode {// 結點…

詳解與FTP服務器相關操作

目錄 什么是FTP服務器 搭建FTP服務器相關 ?編輯 Unity中與FTP相關的類 上傳文件到FTP服務器 使用FTP服務器上傳文件的關鍵點 開始上傳 從FTP服務器下載文件到客戶端 使用FTP下載文件的關鍵點 開始下載 關于FTP服務器的其他操作 將文件的上傳&#xff0c;下載&…

Day92 | 靈神 | 二叉樹 路徑總和

Day92 | 靈神 | 二叉樹 路徑總和 112.路徑總和 112. 路徑總和 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 1.遞歸函數意義 如果在根節點為t的樹中可以找到長度為target的路徑就返回true&#xff0c;找不到就返回false 2.參數和返回值 bool tra(TreeNode …

探索鴻蒙應用開發:ArkTS應用執行入口揭秘

# 探索鴻蒙應用開發&#xff1a;ArkTS應用執行入口揭秘 在鴻蒙應用開發的領域中&#xff0c;ArkTS作為聲明式開發語言&#xff0c;為開發者們帶來了便捷與高效。對于剛接觸鴻蒙開發的小伙伴來說&#xff0c;搞清楚ArkTS應用程序的執行入口是邁向成功開發的關鍵一步。今天&…

【Web API系列】Web Shared Storage API之WorkletSharedStorage深度解析與實踐指南

前言 在現代Web開發領域&#xff0c;數據存儲與隱私保護的矛盾始終存在。傳統存儲方案如LocalStorage和Cookies面臨著日益嚴格的安全限制&#xff0c;而跨域數據共享的需求卻在持續增長。正是在這樣的背景下&#xff0c;Web Shared Storage API應運而生&#xff0c;其核心組件…

探索鴻蒙沉浸式:打造無界交互體驗

一、鴻蒙沉浸式簡介 在鴻蒙系統中&#xff0c;沉浸式是一種極具特色的設計理念&#xff0c;它致力于讓用戶在使用應用時能夠全身心投入到內容本身&#xff0c;而盡可能減少被系統界面元素的干擾。通常來說&#xff0c;就是將應用的內容區巧妙地延伸到狀態欄和導航欄所在的界面…

機器學習03——K近鄰

K近鄰算法學習筆記 一、算法簡介 K近鄰算法&#xff08;K - Nearest Neighbors&#xff0c;簡稱KNN&#xff09;是一種簡單而有效的分類和回歸算法。它的核心思想是“近朱者赤&#xff0c;近墨者黑”&#xff0c;即一個數據點的類別或值可以通過其周圍最近的K個鄰居來判斷。K…

序列化 反序列化實例

在Python中&#xff0c; pickle 模塊常用于實現對象的序列化和反序列化&#xff0c;以下是一個簡單的實例&#xff1a; import pickle # 定義一個類 class Person: def __init__(self, name, age): self.name name self.age age # 創建一個Person對象 person Person("…

代碼隨想錄算法訓練營第十九天

LeetCode題目: 77. 組合216. 組合總和 III17. 電話號碼的字母組合2537. 統計好子數組的數目(每日一題)516. 最長回文子序列1039. 多邊形三角剖分的最低得分543. 二叉樹的直徑124. 二叉樹中的最大路徑和2246. 相鄰字符不同的最長路徑 其他: 今日總結 往期打卡 77. 組合 跳轉: 7…

存算分離看場景

計算機行業是唯一一個比時裝行業概念更多的行業。概念頻出&#xff0c;最慢的話半年一定出一個&#xff0c;短的話半個月就能看到新的名詞和技術甚至是概念。 存算分離的概念 我第一次聽到存算分離時候還是從Hadoop上聽到的。然后就去問什么是存算分離。聽了講解以后&#xf…

MCP協議,.Net 使用示例

服務器端示例 基礎服務器 以下是一個基礎的 MCP 服務器示例&#xff0c;它使用標準輸入輸出&#xff08;stdio&#xff09;作為傳輸方式&#xff0c;并實現了一個簡單的回顯工具&#xff1a; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…

智能語音處理+1.5使用PocketSphinxshinx實現語音轉文本(100%教會)

歡迎來到智能語音處理系列的最后一篇文章&#xff0c;到這里,基本上語音處理是沒問題了. 第一篇:智能語音處理1.1下載需要的庫(100%實現)-CSDN博客 第二篇:智能語音識別1.2用SAPI實現文本轉語音(100%教會)-CSDN博客 第三篇:智能語音處理1.3用SpeechLib實現文本轉語音(100%教會)…

Kubernetes 節點摘除指南

目錄 一、安全摘除節點的標準流程 1. 確認節點名稱及狀態 2. 標記節點為不可調度 3. 排空&#xff08;Drain&#xff09;節點 4. 刪除節點 二、驗證節點是否成功摘除 1. 檢查節點列表 2. 檢查節點詳細信息 3. 驗證 Pod 狀態 三、徹底清理節點&#xff08;可選&#xf…

信息安全管理與評估2021年國賽正式卷答案截圖以及十套國賽卷

2021年全國職業院校技能大賽高職組 “信息安全管理與評估”賽項 任務書1 賽項時間 共計X小時。 賽項信息 賽項內容 競賽階段 任務階段 競賽任務 競賽時間 分值 第一階段 平臺搭建與安全設備配置防護 任務1 網絡平臺搭建 任務2 網絡安全設備配置與防護 第二…

3D語義地圖中的全局路徑規劃!iPPD:基于3D語義地圖的指令引導路徑規劃視覺語言導航

作者&#xff1a; Zehao Wang, Mingxiao Li, Minye Wu, Marie-Francine Moens, Tinne Tuytelaars 單位&#xff1a;魯汶大學電氣工程系&#xff0c;魯汶大學計算機科學系 論文標題&#xff1a; Instruction-guided path planning with 3D semantic maps for vision-language …

《AI大模型應知應會100篇》第20篇:大模型倫理準則與監管趨勢

第20篇&#xff1a;大模型倫理準則與監管趨勢 摘要 隨著人工智能&#xff08;AI&#xff09;技術的飛速發展&#xff0c;尤其是大模型&#xff08;如GPT、PaLM等&#xff09;在自然語言處理、圖像生成等領域的廣泛應用&#xff0c;AI倫理問題和監管挑戰日益凸顯。本文將梳理當…

【Ai】dify:Linux環境安裝 dify 詳細步驟

一、什么是dify Dify 是一個 開源的大語言模型(LLM)應用開發平臺,旨在幫助開發者快速構建基于 AI 的應用程序,例如智能對話助手、知識庫問答、內容生成工具等。它提供了可視化的流程編排、模型集成、數據管理等功能,降低了開發門檻,支持快速迭代和部署。 核心功能與特點…

CentOS 操作系統下搭建 tsung性能測試環境

寫在前面 為何這么安裝,實際就是這么做的,這是經過好幾次實踐得出的經驗總結。 這為了讓大家更清楚的知道怎么安裝 tsung性能測試環境,按步照搬的安裝即可。 步驟 1、 下載軟件安裝包 CentOS-6.0-x86_64-bin-DVD1.iso jdk-6u4-linux-x64-rpm.bin erlang: otp_src_1…

Vulkanised

Vulkanised 1. About VulkanisedReferences The Premier Vulkan Developer Conference premier /?premi?(r)/ n. 總理&#xff1b;(尤用于報章等) 首相&#xff1b;(加拿大的) 省總理&#xff1b;地區總理 adj. 第一的&#xff1b;首要的&#xff1b;最著名的&#xff1b;最…