最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue?目錄樹的展開與關(guān)閉的實現(xiàn)

 更新時間:2023年11月24日 10:07:40   作者:Ann_R  
Vue作為一款流行的前端框架,提供了一種數(shù)據(jù)驅(qū)動的方式來實現(xiàn)目錄樹,本文主要介紹了vue?目錄樹的展開與關(guān)閉的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下

本文主要介紹了 vue 目錄樹的展開與關(guān)閉,具體如下:

<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數(shù)組
needExpandedNodes:[],//需要展開的treenode的node數(shù)組

關(guān)鍵在于以下兩行代碼

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

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

//list 是目錄樹節(jié)點以及目錄樹節(jié)點下的文件所組成的一個數(shù)組
this.data_option = this.addTypeIdToTreeNode(list);  

addTypeIdToTreeNode(lastList) {
      //傳進去的list是有tree又有file
      //給每個node節(jié)點添加type_id,用來展開目錄設(shè)置唯一值
      let treeData = lastList;
      const addIdToTree = (treeData) => {
        return treeData.map((node, index) => {
          if (!node._id) {  //根據(jù)自己目錄樹數(shù)組的實際情況修改,因為我這個_id有用所以需要判斷
            const newNode = {
              ...node,
              type_id: node.type_code == 0 ? "wfl000" : node.type_code,
            }; // 創(chuàng)建一個新的節(jié)點,包括原有的屬性和新的 _id 屬性
            if (node.childrens && node.childrens.length > 0) {
              newNode.childrens = addIdToTree(node.childrens); // 遞歸處理子節(jié)點
            }
            return newNode;
          } else {
            const newNode = { ...node, type_id: node._id }; // 創(chuàng)建一個新的節(jié)點,包括原有的屬性和新的 _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、翻頁方法中控制目錄樹節(jié)點的展開與關(guān)閉

this.$nextTick(() => {
   this.$refs.tree.setCurrentKey(
     this.userArr[0].type_id  //高亮當(dāng)前節(jié)點,type_id 唯一值確定節(jié)點
   );
   //展開高亮文件的目錄
   this.expandedKeys.forEach((node) => {
     if (
      //this.indexLocation 翻頁之后是a文件,a文件的下標(biāo)
       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、搜索目錄樹節(jié)點名稱控制節(jié)點的展開與關(guān)閉

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

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

this.handleNodeClick(this.needExpandedNodes[0],this.$refs.tree.getNode(this.needExpandedKeys[0]))

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

到此這篇關(guān)于vue 目錄樹的展開與關(guān)閉的實現(xiàn)的文章就介紹到這了,更多相關(guān)vue 目錄樹 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:

相關(guān)文章

  • vue項目中接入websocket時需要ip端口動態(tài)部署問題

    vue項目中接入websocket時需要ip端口動態(tài)部署問題

    這篇文章主要介紹了vue項目中接入websocket時需要ip端口動態(tài)部署問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Vue+Canvas制作簡易的水印添加器小工具

    Vue+Canvas制作簡易的水印添加器小工具

    隨著搬運工的逐漸增加,原創(chuàng)作者的利益收到了極大的影響。所以給圖片或視頻加上水印顯得極其重要。本文分享一個由canvas和vue.js制作的圖片水印添加器,需要的可參考一下
    2022-06-06
  • react router零基礎(chǔ)使用教程

    react router零基礎(chǔ)使用教程

    React-Router 路由庫,是官方維護的路由庫,事實上也是唯一可選的路由庫。它通過管理 URL,實現(xiàn)組件的切換和狀態(tài)的變化,開發(fā)復(fù)雜的應(yīng)用幾乎肯定會用到
    2022-09-09
  • vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果

    vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果

    今天小編就為大家分享一篇vue實現(xiàn)設(shè)置載入動畫和初始化頁面動畫效果,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • Vue.js 和 MVVM 的注意事項

    Vue.js 和 MVVM 的注意事項

    MVVM 是Model-View-ViewModel 的縮寫,它是一種基于前端開發(fā)的架構(gòu)模式,Vue.js 是一個提供 MVVM 風(fēng)格的雙向數(shù)據(jù)綁定的 Javascript 庫,專注于View 層。這篇文章給大家介紹Vue.js 和 MVVM 的注意事項,感興趣的朋友一起看看吧
    2016-11-11
  • vue中$nexttick,$set,$forceupdate的區(qū)別

    vue中$nexttick,$set,$forceupdate的區(qū)別

    本文主要介紹了vue中$nexttick,$set,$forceupdate的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 詳解vue在項目中使用百度地圖

    詳解vue在項目中使用百度地圖

    這篇文章主要介紹了vue在項目中使用百度地圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue 中filter的多種用法

    vue 中filter的多種用法

    這篇文章主要介紹了vue 中filter的多種用法,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2018-04-04
  • vue解決跨域問題的幾種常用方法(CORS)

    vue解決跨域問題的幾種常用方法(CORS)

    在Vue中解決跨域問題有多種方法,今天通過本文給大家介紹幾種比較常見的方法,對vue解決跨域問題感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • vue搭建簡易前端的思路及問題詳解

    vue搭建簡易前端的思路及問題詳解

    這篇文章主要介紹了如何使用Vue和ElementPlus構(gòu)建前端頁面,特別是如何進行跨域請求和使用Vue?Router進行路由管理,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-01-01

最新評論

江门市| 乳山市| 富阳市| 门源| 博罗县| 西乌| 和龙市| 交城县| 遵化市| 彭州市| 仁化县| 武隆县| 永登县| 东平县| 济阳县| 富川| 枣庄市| 汝南县| 文登市| 康马县| 闵行区| 定结县| 基隆市| 顺平县| 桓仁| 八宿县| 东乌| 商南县| 合水县| 句容市| 普洱| 安义县| 德阳市| 闽清县| 金平| 池州市| 乌苏市| 合江县| 綦江县| 威海市| 安仁县|