中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

el-tree樹組件懶加載怎么實現

發布時間:2023-03-10 11:31:14 來源:億速云 閱讀:207 作者:iii 欄目:開發技術

這篇“el-tree樹組件懶加載怎么實現”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“el-tree樹組件懶加載怎么實現”文章吧。

    實現懶加載tree,需要為tree組件添加lazy和:load="load"

    首先,load屬性綁定一個懶加載函數,當點擊節點時觸發

    一般是通過樹節點id請求后端接口,添加新的節點數據,但我最近遇到的是后端一次性返回上千條數據(樹數組結構),由前端進行處理實現懶加載

    我們來看下怎么實現

      <el-tree
          ref="tree"
          lazy
          :load="load"
          highlight-current
          @node-click="handleNodeClick"
          :expand-on-click-node="false"
          :node-key="key"
          :props="defaultProps"
          :current-node-key="currentNodeKey"
        >
       </el-tree>
    • load方法會回調兩個參數,第一個是節點信息node,第二個是加載函數resolve

    • resolve會默認觸發一次,并且node.level===0,所以就不用在created中請求后端數據了,直接在默認觸發中請求后端數據

    • 如果node.level===0說明是默認觸發,直接resolve請求后端返回的樹數組數據,el-tree懶加載情況下只會渲染數組的第一級,不會渲染數組的children

    • 在默認觸發的時候將樹數組轉成扁平數組,后續懶加載節點的時候從扁平數組里取就可以了

    • 因為懶加載樹無法判斷有沒有子節點,所以必須手動添加leaf:true,才能取消左側的小箭頭,在樹結構數組轉換成扁平數組時給沒有子節點的數組對象加上這一屬性

    • 很多時候需要默認展開樹節點,比如選中第一級下第一個節點,在nextTick中nodedata.expanded = true來展開節點,nodedata.loadData()再次觸發resolve函數

      methods: {
        /** 傳遞一個懶加載函數給el-tree組件 */
        load(node, resolve) {
          this.chooseNode = node;
          // 這里后端給的數據唯一標識不是id,是key,根據個人數據修改
          this.getTreeData(node.level, node.data.key, resolve);
        },
        /** 懶加載樹節點數據處理函數 */
        async getTreeData(level, key, resolve) {
          if (level === 0) {
            this.loading = true;
            const { data: res } = await http.post('getTreeNode');
            if (res.code === 200 && res.data && res.data.length) {
              this.treeData = this.treeArrayToArray(res.data);
              resolve(res.data);
              this.$nextTick(() => {
                // 零級的第一個子節點,也就是第一級的第一個節點
                let nodedata = this.chooseNode.childNodes[0];
                nodedata.expanded = true;
                // 再次觸發load方法
                nodedata.loadData();
                // 注意,因為上方再次觸發load方法,走了this.chooseNode = node;這一步,所以這里的 this.chooseNode指向的是零級的子節點,也就是第一級,這里的`this.chooseNode.childNodes[0]`表示的是是第二級的第一個節點
                this.currentNodeKey = this.chooseNode.childNodes[0].data.key;
                this.handleNodeClick(this.chooseNode.childNodes[0].data);
              });
            } else {
              resolve([]);
            }
            this.loading = false;
          } else {
            // 根據key去找到點擊樹節點的children數組,加載數據到其下
            const currentNode = this.treeData.find(item => item.key === key);
            if (currentNode.children && currentNode.children.length) {
              resolve(currentNode.children);
            } else {
              resolve([]);
            }
          }
        },
        /** 樹結構數組轉換成扁平數組 */
        treeArrayToArray(tree) {
          const arr = [];
          function recursiveFunction(tree) {
            for (let i = 0; i < tree.length; i++) {
              // 給所有沒有子節點的節點添加leaf屬性,該屬性用來取消左側小箭頭
              if (!(tree[i].children && tree[i].children.length)) {
                tree[i].leaf = true;
              }
              arr.push(tree[i]);
              if (tree[i].children && tree[i].children.length) {
                recursiveFunction(tree[i].children);
              }
            }
          }
          recursiveFunction(tree);
          return arr;
        },
        /** 獲取點擊樹節點的數據,進行渲染右側頁面等操作 */
        handleNodeClick(data) {
        },
      },

    以上就是關于“el-tree樹組件懶加載怎么實現”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    双城市| 启东市| 万载县| 武邑县| 涟源市| 岱山县| 灌南县| 玛曲县| 秦安县| 宜阳县| 牙克石市| 宣武区| 阿合奇县| 郁南县| 库伦旗| 姚安县| 巨野县| 砚山县| 河津市| 太湖县| 噶尔县| 奎屯市| 博客| 怀远县| 广丰县| 崇州市| 曲松县| 乌鲁木齐县| 凤山县| 灵宝市| 耒阳市| 阳新县| 九江市| 乌拉特中旗| 安庆市| 黔西| 上蔡县| 上虞市| 斗六市| 梅州市| 沁源县|