vue 目錄樹的展開與關閉

目錄

  • 1、翻頁方法中控制目錄樹節點的展開與關閉
  • 2、搜索目錄樹節點名稱控制節點的展開與關閉

<el-tree:data="data_option"ref="tree":props="defaultProps"@node-click="handleNodeClick":default-expanded-keys="needExpandedKeys"node-key="type_id"highlight-current>
</el-tree>expandedKeys: [], //所有treenode的id
needExpandedKeys: [], //需要展開的treenode的id數組
needExpandedNodes:[],//需要展開的treenode的node數組

關鍵在于以下兩行代碼

 :default-expanded-keys="needExpandedKeys"  // needExpandedKeys數組,用來保存展開節點的唯一值node-key="type_id"  //每個節點的唯一值,這里我的唯一值是type_id

data_option 數組如果沒有這個唯一值怎么辦,給它加一個

//list 是目錄樹節點以及目錄樹節點下的文件所組成的一個數組
this.data_option = this.addTypeIdToTreeNode(list);  addTypeIdToTreeNode(lastList) {//傳進去的list是有tree又有file//給每個node節點添加type_id,用來展開目錄設置唯一值let treeData = lastList;const addIdToTree = (treeData) => {return treeData.map((node, index) => {if (!node._id) {  //根據自己目錄樹數組的實際情況修改,因為我這個_id有用所以需要判斷const newNode = {...node,type_id: node.type_code == 0 ? "wfl000" : node.type_code,}; // 創建一個新的節點,包括原有的屬性和新的 _id 屬性if (node.childrens && node.childrens.length > 0) {newNode.childrens = addIdToTree(node.childrens); // 遞歸處理子節點}return newNode;} else {const newNode = { ...node, type_id: node._id }; // 創建一個新的節點,包括原有的屬性和新的 _id 屬性return newNode;}});};const treeDataWithId = addIdToTree(treeData);let str = [];const getStr = function (list) {list.forEach(function (row) {if (row.childrens) {str.push(row.type_id);getStr(row.childrens);} else {str.push(row.type_id);}});};getStr(treeDataWithId);this.expandedKeys = str;// console.log("需要展開的treenode", this.expandedKeys);// console.log("需要展開的treeDataWithId", treeDataWithId);return treeDataWithId;},

1、翻頁方法中控制目錄樹節點的展開與關閉


this.$nextTick(() => {this.$refs.tree.setCurrentKey(this.userArr[0].type_id  //高亮當前節點,type_id 唯一值確定節點);//展開高亮文件的目錄this.expandedKeys.forEach((node) => {if (//this.indexLocation 翻頁之后是a文件,a文件的下標this.userArr[this.indexLocation].type_id.indexOf(node) !== -1  ) {this.needExpandedKeys.push(node);}});this.needExpandedKeys.forEach((node) => {this.$refs.tree.store.setCheckedNodes([node], true);});});

2、搜索目錄樹節點名稱控制節點的展開與關閉

//搜索goToSearch(){let treedata = this.data_optionif(this.searchStr){//需要關閉所有節點 //除了上次搜索展開的節點還有自己點擊展開的節點this.changeTreeNodeStatus(this.$refs.tree.store.root)this.needExpandedNodes = []this.needExpandedKeys = []//獲取需要展開的節點數組this.findTypeCode(treedata, this.searchStr)this.needExpandedNodes.forEach(item=>{this.needExpandedKeys.push(item.type_id)})if(this.needExpandedKeys.length == 0){this.$message.error("沒有找到您搜索的目錄節點")}else{//模擬點擊該節點,使其高亮,默認高亮搜索出的第一個節點this.handleNodeClick(this.needExpandedNodes[0],this.$refs.tree.getNode(this.needExpandedKeys[0]))}console.log("needExpandedKeys",this.needExpandedKeys)}else{this.changeTreeNodeStatus(this.$refs.tree.store.root)this.needExpandedNodes = []this.needExpandedKeys = []}},//循環拿到需要展開的目錄子節點findTypeCode(treeData, targetName) {// 遍歷樹結構for (let i = 0; i < treeData.length; i++) {const node = treeData[i];// 如果節點的 type_name 包含目標名稱,返回該節點的 type_codeif (node.type_name.includes(targetName)) {// if (node.type_name==targetName) {console.log(node.type_id)if(node.type_id){this.needExpandedNodes.push(node)}}// 如果節點有子節點,遞歸調用自身進行深度優先搜索if (node.childrens && node.childrens.length > 0) {const result = this.findTypeCode(node.childrens, targetName);// 如果在子樹中找到了匹配的節點,返回結果if (result) {return result;}}}// 如果沒有找到匹配的節點,返回 null 或者適合您的默認值return null;},changeTreeNodeStatus(node) {node.expanded = falsefor (let i = 0; i < node.childNodes.length; i++) {// 改變節點的自身expanded狀態node.childNodes[i].expanded = this.defaultExpand// 遍歷子節點if (node.childNodes[i].childNodes.length > 0) {this.changeTreeNodeStatus(node.childNodes[i])}}},

記錄一個比較重要的點:高亮某行目錄樹節點

this.handleNodeClick(this.needExpandedNodes[0],this.$refs.tree.getNode(this.needExpandedKeys[0]))//即:
this.handleNodeClick(node, this.$refs.tree.getNode(node))
//node為 目錄樹的一個節點,在我這兒比如data_option數組中的某個對象

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

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

相關文章

1、開發工具介紹及軟件安裝

軟件安裝 百度網盤鏈接&#xff1a;https://pan.baidu.com/s/1J7sgXntt9eLNBhI1Dc6MsQ?pwd2023 提取碼&#xff1a;2023 # 一 Keil5安裝步驟&#xff1a; 激活&#xff1a; STC-ISP安裝步驟&#xff1a; STC-ISP.exe安裝即用 安裝CH340_CH341驅動程序 所有學習課程和資源…

【vue】ant-design-vue的樹結構實現節點增刪改查

根據業務需要&#xff0c;實現樹結構的節點新增編輯刪除功能&#xff0c;主要邏輯是利用樹節點的scopedSlots屬性對其進行自定義改造&#xff0c;監聽懸停事件在節點右側出現增刪改對應圖標&#xff0c;點擊圖標出現彈窗表單對內容進行修改&#xff0c;具體代碼如下&#xff1a…

藍橋杯每日一題2023.11.23

題目描述 題目分析 本題使用遞歸模擬即可&#xff0c;將每一個大格子都可以拆分看成幾個小格子&#xff0c;先將最開始的數字進行填入&#xff0c;使每一個對應小格子的值都為大格子對應的數&#xff0c;搜索找到符合要求的即可 &#xff08;答案&#xff1a;50 33 30 41&am…

Vue3+ts學習筆記2

<script setup lang"ts"> import {onBeforeMount,onMounted,onBeforeUpdate,onUpdated,onBeforeUnmount,onUnmounted} from vueonBeforeMount(()>{console.log(---掛載之前---) })onMounted(()>{console.log(---掛載---) })onBeforeUpdate(()>{consol…

Python爬取京東商品銷售數據進行數據分析示例代碼,以口紅為例

文章目錄 一、準備工作驅動安裝模塊使用與介紹 二、流程解析三、完整代碼四、效果展示關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資…

git代碼提交命令(如何提交代碼)

# 提交暫存區到倉庫區 $ git commit -m [message]# 提交暫存區的指定文件到倉庫區 $ git commit [file1] [file2] ... -m [message]# 提交工作區自上次commit之后的變化&#xff0c;直接到倉庫區 $ git commit -a# 提交時顯示所有diff信息 $ git commit -v# 使用一次新的commit…

2023年中國釩鐵產量及行業進出口現狀分析[圖]

釩鐵&#xff0c;銀白色塊狀&#xff0c;一般分為桶裝或噸袋包裝&#xff0c;根據釩含量的不同分為50釩鐵&#xff08;FeV50&#xff09;和80釩鐵&#xff08;FeV80&#xff09;,通過爐外法或電爐法冶煉生產&#xff0c;北方多以爐外法制取&#xff0c;南方多為電爐法生產。 釩…

Chrome瀏覽器將從2024年6月開始限制廣告攔截器

雖然一年前&#xff0c;谷歌公司已經暫停推出新的“Manifest V3”擴插件展格式&#xff0c;原因是這種新格式會對 Chrome 中一些最受歡迎的擴展插件造成嚴重損害&#xff1b;一年后今天&#xff0c;Google 正在重新啟動該計劃&#xff0c;逐步淘汰 Chrome 擴展程序當前的 Manif…

Faster R-CNN源碼解析(一)

目錄 前言訓練腳本(train_mobilenetv2.py)自定義數據集(my_dataset.py) 前言 Faster R-CNN 是經典的two-stage目標檢測模型&#xff0c; 原理上并不是很復雜&#xff0c;也就是RPNFast R-CNN&#xff0c;但是在代碼的實現上確實有很多細節&#xff0c;并且源碼也非常的多&…

chatglm3部署使用

chatglm3部署使用 1.部署2.使用3.接入微信4.vue前端 1.部署 1.首先去github下載chatglm3代碼。Huggingface下載模型一直失敗&#xff0c;所以用阿里的魔塔社區下載。 git clone https://github.com/THUDM/ChatGLM3.git git clone https://www.modelscope.cn/ZhipuAI/chatglm3…

docker常見問題匯總

docker常見問題 ?問題1&#xff1a;啟動docker容器時&#xff0c;報錯Unknown runtime specified nvidia. 當我啟動一個容器時&#xff0c;運行以下命令&#xff1a; docker run --runtimenvidia 。。。。 后面一部分命令沒寫出來&#xff0c;此時報錯的信息如下&#xff1a;…

python-opencv劃痕檢測

python-opencv劃痕檢測 這次實驗&#xff0c;我們將對如下圖片進行劃痕檢測&#xff0c;其實這個比較有難度&#xff0c;因為清晰度太差了。 我們做法如下&#xff1a; &#xff08;1&#xff09;讀取圖像為灰度圖像&#xff0c;進行自適應直方圖均衡化處理&#xff0c;增強圖…

thingsboard3.6的mailConfigTemplateController錯誤

1、bug內容 使用3.6版本的tb代碼進行打包生成boot的jar包,在啟動的時候會報錯mailConfigTemplateController bean初始化找不到文件路徑。 Error creating bean with name mailConfigTemplateController defined in URL [jar:file:/D:/yuxinwei/AE/thingsboard/thingsboard-3…

nuxt3項目修改端口號

nuxt的默認端口號是3000 一、修改開發環境端口號 方式一&#xff1a;使用環境變量配置,設置&#xff08;PORT 或 NUXT_PORT&#xff09; # .env PORT3001 #http://localhost:3001/ NITRO_PORT3001 #http://localhost:3001/ 方式二&#xff1a;nuxt.config.ts里配置…

vue2.0+elementui集成file-loader之后圖標失效問題

背景 跑vue2elementUI項目時&#xff0c;由于前端這邊需要在本地存放xlsx模板文件&#xff0c;供用戶下載模板文件&#xff0c;所以需要在webpack構建的時候增加file-loader進行解析xlsx文件打包。 vue版本2.x element-ui 版本 2.13.x 注意 npm i -D file-loader版本號給vue項…

操作系統 day12(調度算法的評價指標)

評價指標 CPU利用率 系統吞吐量 周轉時間 帶權周轉時間 等待時間 響應時間

vue中屬性的基本用法

v-for指令的用法 v-for指令用于重復輸出當前元素。 案例&#xff1a;寫一個新的組件頁面&#xff1a;For.vue 當訪問&#xff1a; /for時看到它。 場景1 遍歷字符串數組輸出每一個列表項元素&#xff1a; data: {nav: [京東超市,京東家電,秒殺,拍賣,京東生鮮,PLUS會員] } …

【python學習】中級篇-TCP編程Socket模塊:客戶端與服務端

客戶端 創建一個基于TCP連接的Socket AF_INET指定使用IPv4協議 AF_INET6指定使用IPv6協議 # 導入socket庫: import socket# 創建一個socket: s socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立連接: s.connect((www.sina.com.cn, 80))客戶端要主動發起TCP連接 必…

2022-1-25 機器人運動規劃方法綜述 航空學報

論文PDF abstract 隨著應用場景的日益復雜&#xff0c;機器人對旨在生成無碰撞路徑&#xff08;軌跡&#xff09;的自主運動規劃技術的需求也變得更加迫 切。雖然目前已產生了大量適應于不同場景的規劃算法&#xff0c;但如何妥善地對現有成果進行歸類&#xff0c;并分析不同…

Spark---基于Standalone模式提交任務

Standalone模式兩種提交任務方式 一、Standalone-client提交任務方式 1、提交命令 ./spark-submit --master spark://mynode1:7077 --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100 或者 ./spark-submit --master spark…