elementplus的cascader級聯選擇器在懶加載且多選時的一些問題分析

1. 背景

在之前做的一個項目中使用到了element的級聯選擇器,并且是需要懶加載、多選、父子不關聯等等,在選的時候當然沒問題,但是回顯的時候就會回顯不出來,相信大部分伙伴都遇到過這個問題。我在以前出過一篇文章寫過關于級聯選擇器在動態加載時的回顯解決。el-cascader級聯選擇器動態加載時的回顯解決-源碼解析
我在當時提出了兩種解決方案,第一種是“初始化時調接口渲染panel”,第二種是“改交互”。在element-plus中的級聯選擇器的動態加載中,其實是支持了回顯的,用的方法其實就是第一種“初始化時調接口渲染panel”。現在看看element和elemengplus中cascader的區別。

2. 問題

2.1 elementplus中cascader級聯選擇器的回顯

2.1.1 elementplus的cascader本身就支持回顯了

在element和elemengplus中的cascader的initStore方法有一個重要區別:

elementUI:

圖1

element-plus: 看圖2,在element-plus中新加了一個syncCheckedValue方法,光看這個名字就知道大概的功能,異步選中節點的值。再看圖3,有一個forEach方法,然后遞歸調用lazyLoad方法,將syncCheckedValue方法作為回調函數傳入lazyLoad方法。再看圖4的lazyLoad方法,將syncCheckedValue方法在resolve中調用了。總之,這幾個方法運行后就會回顯懶加載的數據。

圖2

圖3

?

圖4?

但是正如我之前在那篇文章里說的,多選時這種做法是不現實的,只有單選的時候適用。

圖5?

2.2.2 我的解決方法

如我之前那篇文章所示,我也是通過改交互,并且借鑒了之前說過的lazyCascader的交互,但是具體邏輯改成了適用于我們業務的邏輯。具體組件如下所示。核心邏輯就是把回顯框與選擇的panel解偶。具體代碼大家可以訪問我上面那篇文章鏈接,里面有貼lazyCascader的地址。

圖6?

2.2 cascader多選時選中節點后會回彈到頂部選中節點處

2.2.1?scrollIntoView

死去的回憶突然攻擊我!最近在用elementplus的cascader懶加載回顯,又遇到了這個問題。之前在vue2就遇到過這個問題,所以我一下就找到了原因,全是因為cascader中的這個函數:

scrollIntoView

圖7?

這個問題在社區的issue中有很多個朋友問過。有element的,也有elementPlus中的。關于為什么會執行這個syncMenuState方法,具體看這個issue的評論區的回答。[Bug Report] el-cascader 選中會自動跳到第一次選中位置 #21947

先說一下我的情況,我的情況是我沒用cascader的lazy方法,而是自己將接口請求回的數據用遞歸塞到了options里,就導致了options的變化。然后見如下elementPlus中cascade的源碼執行順序:

options變化 -> initStore -> syncCheckedValue -> syncMenuState -> scrollToExpandingNode -> scrollIntoView

所以我這種情況,因為人為修改了options,并不是組件內部自己去用懶加載方式去處理options。那么這個函數按照源代碼邏輯是必會執行的。

圖8

?

圖9?

圖10

?

圖11

?

圖12?

2.2.2 解決方法

我這個解決方法有點不講武德,直接copy源代碼到本地,scrollIntoView注釋掉。我在vue2和vue3兩個版本都是這樣干的。但是我是因為我的邏輯必定會觸發scrollIntoView方法,其余情況大家看下是不是自己的options和value值處理得不對。

vue2: 10月前。

圖13?

vue3:?

圖14?

復制下來用需要修改一下源碼的一些引入路徑。

比如這種,在源代碼中寫的是相對路徑../store.mjs,那么需要將這種全部改為絕對路徑,讓資源去從nodemodule的element-plus中找。

圖15?

3. 總結

這就是最近使用elementPlus的cascader遇到的兩個問題,希望能幫助到大家。ps:我發現遇到這種第三方庫的問題去github上看issue還是挺有用的,之前時間選擇器遇到個問題也是去issue里找到的,怪不得大家在技術選型時都要提倡所選的庫要社區活躍。

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

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

相關文章

【Python運維】用Python自動化AWS資源管理:利用boto3實現高效管理S3桶和EC2實例

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著云計算的普及,AWS(Amazon Web Services)已經成為許多企業和開發者首選的云平臺。為了提高工作效率,自動化管理AWS資源成為了一個熱…

淘寶關鍵字搜索接口爬蟲測試實戰指南

在電商數據分析和市場研究中,通過關鍵字搜索獲取淘寶商品信息是一項重要任務。淘寶開放平臺提供了 item_search 接口,允許開發者通過關鍵字搜索商品,并獲取商品列表及相關信息。本文將詳細介紹如何設計并測試一個基于該接口的爬蟲程序&#x…

【Linux實踐系列】:用c語言實現一個shell外殼程序

🔥本文專欄:Linux Linux實踐項目 🌸博主主頁:努力努力再努力wz 那么今天我們就要進入Linux的實踐環節,那么我們之前學習了進程控制相關的幾個知識點,比如進程的終止以及進程的等待和進程的替換,…

?算法OJ?N-皇后問題 II【回溯剪枝】(C++實現)N-Queens II

?算法OJ?N-皇后問題【回溯剪枝】(C實現)N-Queens 問題描述 The n-queens puzzle is the problem of placing n n n queens on an n n n \times n nn chessboard such that no two queens attack each other. Given an integer n, return the num…

03.06 QT

一、使用QSlider設計一個進度條&#xff0c;并讓其通過線程自己動起來 程序代碼&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…

Spring WebFlux 中 WebSocket 使用 DataBuffer 的注意事項

以下是修改后的完整文檔&#xff0c;包含在多個多線程環境中使用 retain() 和 release() 方法的示例&#xff0c;且確保在 finally 塊中調用 release()&#xff1a; 在 Spring WebFlux 中&#xff0c;WebSocketMessage 主要用于表示 WebSocket 的消息載體&#xff0c;其中 getP…

【CSS】Tailwind CSS 與傳統 CSS:設計理念與使用場景對比

1. 開發方式 1.1 傳統 CSS 手寫 CSS&#xff1a;你需要手動編寫 CSS 規則&#xff0c;定義類名、ID 或元素選擇器&#xff0c;并為每個元素編寫樣式。 分離式開發&#xff1a;HTML 和 CSS 通常是分離的&#xff0c;HTML 中通過類名或 ID 引用 CSS 文件中的樣式。 示例&#…

2025華為OD機試真題E卷 - 螺旋數字矩陣【Java】

題目描述 疫情期間,小明隔離在家,百無聊賴,在紙上寫數字玩。他發明了一種寫法:給出數字個數 n (0 < n ≤ 999)和行數 m(0 < m ≤ 999),從左上角的 1 開始,按照順時針螺旋向內寫方式,依次寫出2,3,…,n,最終形成一個 m 行矩陣。小明對這個矩陣有些要求: 1、…

地下井室可燃氣體監測裝置:守護地下安全,防患于未“燃”!

在城市的地下&#xff0c;隱藏著無數的燃氣管道和井室&#xff0c;它們是城市基礎設施建設的重要部分&#xff0c;燃氣的使用&#xff0c;給大家的生活提供了極大的便利。在便利生活的背后&#xff0c;也存在潛在的城市安全隱患。 近年來&#xff0c;地下井室可燃氣體泄漏事故…

【使用hexo模板創建個人博客網站】

使用hexo模板創建個人博客網站 環境準備node安裝hexo安裝ssh配置 使用hexo命令搭建個人博客網站hexo命令 部署到github創建倉庫修改_config.yml文件 編寫博客主題擴展 環境準備 node安裝 進入node官網安裝node.js 使用node -v檢查是否安裝成功 安裝成功后應該出現如上界面 …

C# OPC DA獲取DCS數據(提前配置DCOM)

OPC DA配置操作手冊 配置完成后&#xff0c;訪問遠程ip&#xff0c;就能獲取到服務 C#使用Interop.OPCAutomation采集OPC DA數據&#xff0c;支持訂閱&#xff08;數據變化&#xff09;、單個讀取、單個寫入、斷線重連

發行思考:全球熱銷榜的頻繁變動

幾點雜感&#xff1a; 1、單機游戲銷量與在線人數的衰退是劇烈的&#xff0c;有明顯的周期性&#xff0c;而在線游戲則穩定很多。 如去年的某明星游戲&#xff0c;最高200多萬在線&#xff0c;如今在線人數是48名&#xff0c;3萬多。 而近期熱門的是MH&#xff0c;在線人數8…

Unity自定義區域UI滑動事件

自定義區域UI滑動事件 介紹制作1.創建一個Image2.創建腳本 總結 介紹 一提到滑動事件聯想到有太多的插件了比如EastTouchBundle&#xff0c;今天想單純通過UI去做一個滑動事件而不是基于Box2d或者Box去做滑動事件。 制作 1.創建一個Image 2.創建腳本 using UnityEngine; us…

taosd 寫入與查詢場景下壓縮解壓及加密解密的 CPU 占用分析

在當今大數據時代&#xff0c;時序數據庫的應用越來越廣泛&#xff0c;尤其是在物聯網、工業監控、金融分析等領域。TDengine 作為一款高性能的時序數據庫&#xff0c;憑借獨特的存儲架構和高效的壓縮算法&#xff0c;在存儲和查詢效率上表現出色。然而&#xff0c;隨著數據規模…

《UE5_C++多人TPS完整教程》學習筆記34 ——《P35 網絡角色(Network Role)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P35 網絡角色&#xff08;Network Role&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephe…

K8s 1.27.1 實戰系列(七)Deployment

一、Deployment介紹 Deployment負責創建和更新應用程序的實例,使Pod擁有多副本,自愈,擴縮容等能力。創建Deployment后,Kubernetes Master 將應用程序實例調度到集群中的各個節點上。如果托管實例的節點關閉或被刪除,Deployment控制器會將該實例替換為群集中另一個節點上的…

Linux(Centos 7.6)命令詳解:vim

1.命令作用 vi/vim 是Linux 系統內置不可或缺的文本編輯命令&#xff0c;vim 是vi 的加強版本&#xff0c;兼容vi 的所有指令&#xff0c;不僅能編輯文本&#xff0c;而且還具有shell 程序編輯的功能&#xff0c;可以不同顏色的字體來辨別語法的正確性。 2.命令語法 usage: …

微信小程序引入vant-weapp組件教程

本章教程,介紹如何在微信小程序中引入vant-weapp。 vant-weapp文檔:https://vant-ui.github.io/vant-weapp/#/button 一、新建一個小程序 二、npm初始化 npm init三、安裝 Vant Weapp‘ npm i @vant/weapp -

C++ 作業 DAY5

作業 代碼 Widtget.h class Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private:Ui::Widget *ui;/************************ 起始終止坐標 ************************/QPoint end;QPoint start;QVector<QPoint> per_start_lis…

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐

Selenium 中 ActionChains 支持的鼠標和鍵盤操作設置及最佳實踐 一、引言 在使用 Selenium 進行自動化測試時&#xff0c;ActionChains 類提供了強大的功能&#xff0c;用于模擬鼠標和鍵盤的各種操作。通過 ActionChains&#xff0c;可以實現復雜的用戶交互&#xff0c;如鼠標…