彈窗分頁保留其他頁面勾選的數據(vue)

如圖所示,這是個常見的多選todolist

不過這里多了個要求,彈窗上下頁面切換的時候需要保留勾選結果

這其實也不難,但是如果每次都手動寫一遍卻有點惱人,這次捋一下思路,并把核心代碼記錄一下,方便下次翻找

核心思想

  1. 在服務器返回的數據之外再維護一個列表A,存儲被鉤上的數據
  2. 在請求接口時候給服務器返回數據鉤上已選的
  3. 點擊全選或者單個勾選(或取消勾選)時候再次把當前頁面的勾選數據同步給列表A
  4. 那如何同步呢?重點,后面針對性說同步函數


彈窗封裝


data數據說明

  • data對應的數據有;
  • params: 外部傳入接口請求的參數;
  • single: 是否單選;
  • pickedArr:承接外部傳入的已選中元素數組后變成已選元素數組
  • selectedItems:彈窗內已選中的元素數組;
  • form: 彈窗內查詢列表的參數;


1.對外提供show方法來調用,接受幾個參數,
1.1config.single是否支持單選
1.2.params 接口請求需要的額外參數
1.3.外面已選的列表(最好是完整列表,數組元素包括id和對應的文字)

1.4 根據1.3進行一些過濾(有時候彈窗是個二級彈窗,需要根據params參數進行置空或過濾)最后把過濾后的數組作為當前彈窗已勾選列表來存儲數據


show函數程序入口

  • 初始化配置參數

  • 初始化已選數據

  • 請求列表

  • 顯示彈窗

function show(config) {this.showMaterialPopup = true;const { params, single, pickedArr } = config;//配置參數覆蓋// Array.isArray(filterids) ? (this.filterids = []) : (this.filterids = []);params ? (this.params = params) : (this.params = {});single ? (this.single = true) : (this.single = false);Array.isArray(pickedArr) ? (this.pickedArr = pickedArr) : (this.pickedArr = []);/////////初始化彈窗的已選數據///////const firstPickItem = this.pickedArr[0];//根據params和已選中的第一個做一些判斷或者過濾//這里的代碼是個二級彈窗,可以參考,if (firstPickItem && firstPickItem.materialId && firstPickItem.materialId == params.materialId) {//把傳入已選上的元素的checked都鉤上this.selectedItems = this.pickedArr.map((item) => {item.checked = true; //夠上了return { ...item };});} else {//不符合要求的話,就忽略傳入的已選中元素this.selectedItems = [];}//初始化列表查詢數據this.form.pageNum = 1;//查詢列表數據this.getList();
}

getList函數

  • 獲取元素時候,給【服務器返回的數據list】做勾選初始化
  • 這里就處理了點擊上下頁面和第一次加載時候可以鉤上已選數據
//獲取元素時候,給【服務器返回的數據list】做勾選初始化
//這里就處理了點擊上下頁面和第一次加載時候可以鉤上已選數據
function getlList() {//合并請求參數listAJAXFN({ ...this.form, ...this.params }).then((res) => {if (res.code == 200) {let { rows, total, size } = res.data;// 創建選中序列號的Set,用于O(1)快速查找//數組轉set,方便快速判斷const selectArrSet = new Set(this.pickedArr.map((item) => item.id));// 在單次迭代中處理所有行rows = rows.map((item) => {//如果已選元素里有這個元素,就鉤上item.checked = selectArrSet.has(item.id);return item;});this.list = rows.filter((item) => !this.filterids.includes(item.id));}});
}

同步函數

  • 1.把本頁勾選了的數據給外面傳入已勾選的數據對應勾選上
  • 2.把本頁存在且勾選了,但是外層傳入的數組里面沒有元素找出來合并到已選數據上面
  • 3.全選或者單個勾選(取消或者夠上)時候調用就可以了
//更新已選擇的序列號
//在勾選過程中
function updateselectedSerialNumWhenPick() {//步驟一//判斷有沒有勾選上,針對外面已有選中數據// 合并checked屬性到this.pickedArr中存在的元素this.pickedArr.forEach((aItem) => {//從本頁勾選的數組中找到外層傳入的勾選數據進行匹配//如果存在就給他勾選(因為進入頁面后,用戶可能取消掉了也有可能)//這里只勾選就好了,不需要管不勾選的,不勾選的也不是我們想要的const matchingBItem = this.list.find((bItem) => bItem.id === aItem.id);if (matchingBItem) {aItem.checked = matchingBItem.checked;}});//步驟二,針對本頁勾選的,但是外層數據沒有傳入的數據,//要把它們找出來,并合并到一選數組里面// 獲取當前頁面中中有而a中沒有的元素//夠上了,且外面已勾選的沒有它的數組const uniqueToB = this.list.filter((item) => item.checked).filter((bItem) => !this.pickedArr.some((aItem) => aItem.id === bItem.id));//更新已選中數據this.pickedArr = [...this.pickedArr, ...uniqueToB];
}

確認函數


把已選好的數組里面的checked過濾下,傳遞出去,外面直接接收就行了

onMulitComfirm() {//從已選元素里面拿const arr =this.pickedArr.filter((item) => item.checked);if (arr.length == 0) {this.$u.toast('請勾選序列號');return;}this.$emit('choose', this.material, arr);this.showMaterialPopup = false;
}

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

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

相關文章

分享:一種為藍牙、WIFI、U段音頻發射設備提供ARC回傳數字音頻橋接功能的方案

隨著智能電視、流媒體設備的普及,用戶對高質量音頻輸出的需求激增。為解決多設備協同、無線化傳輸及ARC高保真音頻傳輸的痛點,納祥科技推出HDMI ARC音頻轉換方案:HDMI ARC音頻轉光纖/同軸/I2S/左右聲道,橋接無線音頻發射設備&…

在WPF項目中使用阿里圖標庫iconfont

使用阿里圖標庫的步驟: 1。從阿里圖標庫官方網站上下載圖標。 2。把阿里圖標庫(WPF中支持.ttf字體文件)引入 3。在App.xaml中添加圖標的全局樣式。推薦在此處添加全局樣式,為了保證圖標可以在所有窗體中使用。 代碼如下&#x…

vue3項目啟動流程講解

Vue 3 項目啟動流程詳解Vue 3 項目的啟動流程相比 Vue 2 有了顯著變化,采用了新的應用實例創建方式和組合式 API。下面我將詳細講解 Vue 3 項目的啟動過程,并提供一個可視化演示。實現思路創建 Vue 3 應用實例配置根組件和必要的插件掛載應用到 DOM展示啟…

【C++】LLVM-mingw + VSCode:Windows 開發攻略

LLVM-mingw 是一個基于 LLVM 項目的開源工具鏈,用于在類 Unix 系統(如 Linux 或 macOS)上為 Windows 平臺交叉編譯應用程序,它結合了 LLVM 編譯器基礎設施(包括 Clang C/C/Objective-C 編譯器和 LLD 鏈接器&#xff0c…

AI內容標識新規實施后,大廠AI用戶協議有何變化?(六)科大訊飛

科大訊飛也是國產老將,當年OpenAI橫空出世,國內唯有文心和星火能與之一戰,早期效果感覺甚至是優于文心的,只是后面再也沒有什么大動靜出來。訊飛也算大廠了,但跟百度阿里這些老牌互聯網門閥相比,還是不夠持…

Error: MiniProgramError{“errMsg“:“navigateTo:fail webview count limit exceed“}

這個錯誤 "navigateTo:fail webview count limit exceed" 是微信小程序中常見的頁面棧溢出問題,原因是微信小程序對頁面棧深度有默認限制(通常為10層),當使用 navigateTo 連續跳轉頁面導致頁面棧超過限制時就會觸發。解…

少即是多:從 MPTCP 看優化干預的邊界

“對待端到端傳輸,信息不足就要少干預,越干預越糟糕”,這是我的信條,這次再來說說 MPTCP。 Linux 內核 MPTCP 最好的調度算法就是 default 算法,沒有之一,因為它以代價最小,最自然的方式做到了保…

“開源AI智能名片鏈動2+1模式S2B2C商城小程序”在直播公屏引流中的應用與效果

摘要:本文聚焦于直播公屏引流場景,探討“開源AI智能名片鏈動21模式S2B2C商城小程序”如何通過技術賦能與模式創新,重構直播電商的流量獲取與轉化路徑。研究結合案例分析與實證數據,揭示該方案在提升用戶互動、優化供應鏈管理、降低…

基于大數據挖掘的藥品不良反應知識整合與利用研究

標題:基于大數據挖掘的藥品不良反應知識整合與利用研究內容:1.摘要 隨著醫療數據的爆炸式增長,大數據挖掘技術在醫療領域的應用日益廣泛。本研究旨在利用大數據挖掘技術對藥品不良反應知識進行整合與利用,以提高藥品安全性監測和管理水平。通過收集多源異…

國產時序數據庫選型指南-從大數據視角看透的價值

摘要:大數據時代時序數據庫崛起,工業物聯網場景下每秒百萬級數據點寫入成為常態。Apache IoTDB憑借單節點1000萬點/秒的寫入性能、毫秒級查詢響應和20:1超高壓縮比脫穎而出,其樹形數據模型完美適配工業設備層級結構。相比傳統數據庫&#xff…

教你使用服務器如何搭建數據庫

數據庫是存儲和管理數據的核心組件,無論是網站、應用還是企業系統,都離不開數據庫的支持。本文將以 萊卡云服務器 為例,教你如何快速搭建常用數據庫服務。一、準備工作服務器環境推薦操作系統:Ubuntu 20.04 / Debian 11 / CentOS …

西門子 S7-200 SMART PLC 核心指令詳解:從移位、上升沿和比較指令到流水燈控制程序實戰

對于 PLC 初學者來說,“流水燈” 是繞不開的經典入門案例 —— 它看似簡單,卻濃縮了 PLC 編程的核心邏輯:初始化、時序控制、指令應用與狀態判斷。今天我們就以 S7-200 SMART 為例,逐行拆解一段 8 位流水燈控制程序,帶…

P4342 [IOI 1998] Polygon -普及+/提高

P4342 [IOI 1998] Polygon 題目描述 題目可能有些許修改,但大意一致。 Polygon 是一個玩家在一個有 nnn 個頂點的多邊形上玩的游戲,如圖所示,其中 n4n 4n4。每個頂點用整數標記,每個邊用符號 (加)或符號 *…

枚舉算法和排序算法能力測試

枚舉算法題目 1&#xff1a;找出 1-20 中既是偶數又是 3 的倍數的數題目描述&#xff1a;小明想找出 1 到 20 中既能被 2 整除又能被 3 整除的數字&#xff0c;幫他列出來吧。 代碼&#xff1a;cpp運行#include <iostream> using namespace std; int main() {int a;for (…

大數據電商流量分析項目實戰:Hadoop初認識+ HA環境搭建(二)

?博客主頁&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客內容》&#xff1a;大數據、Java、測試開發、Python、Android、Go、Node、Android前端小程序等相關領域知識 &#x1f4e2;博客專欄&#xff1a; https://blog.csdn.net/m0_63815035/…

【Linux】Linux進程概念(上)

一、馮諾依曼體系結構我們常見的計算機&#xff0c;如筆記本。我們不常見的計算機&#xff0c;如服務器。它們大部分都遵守馮諾依曼體系。截至目前&#xff0c;我們所認識的計算機&#xff0c;都是由一個個硬件組件組成。輸入單元&#xff1a;鍵盤、鼠標、掃描儀、寫板等中央處…

GESP C++ 一~二級拓展課(一)

課題及解析建議用時60分鐘&#xff0c;作業及講解建議用時50分鐘。 課題及解析&#xff1a; 4003&#xff1a;【GESP2303二級】畫三角形 【題目描述】 輸入一個正整數 n&#xff0c;請使用大寫字母拼成一個這樣的三角形圖案&#xff08;參考樣例輸入輸出&#xff09;&#xff…

Kubernetes Ingress:使用 Apache APISIX 進行外部流量路由

什么是 Ingress&#xff1f; 在 Kubernetes 中&#xff0c;隨著微服務架構的廣泛應用&#xff0c;集群中的服務需要暴露到外部&#xff0c;以便供用戶或其他服務訪問。如何高效、安全地管理這些流量&#xff0c;成為了一個重要的議題。Ingress 作為 Kubernetes 提供的一種資源&…

Elasticsearch的理解與使用

在大數據與云計算時代&#xff0c;“高效檢索” 與 “實時分析” 成為業務突破的關鍵能力。Elasticsearch&#xff08;簡稱 ES&#xff09;作為一款開源分布式搜索與分析引擎&#xff0c;憑借其低延遲、高可擴、強靈活的特性&#xff0c;已成為日志分析、全文檢索、業務監控等場…

利用FFmpeg自動批量處理m4s文件

緩存了一些視頻m4s文件&#xff0c;只能用指定的軟件打開&#xff0c;網上查了一下&#xff0c;需要去掉m4s文件開頭的9個0&#xff0c;還要用FFmpeg將兩個文件合并成一個文件。 經仔細研究緩存目錄和其中文件&#xff0c;發現以下特點&#xff1a;“緩存目錄”中有很多“數字文…