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

溫馨提示×

溫馨提示×

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

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

詳解如何實現Element樹形控件Tree在懶加載模式下的動態更新

發布時間:2020-10-22 14:55:07 來源:腳本之家 閱讀:1294 作者:皮皮裴 欄目:web開發

Element提供的Tree樹形控件,可以用清晰的層級結構展示信息,還可以展開或折疊。Tree支持兩種加載模式:一次性加載全部樹節點和懶加載模式。所謂懶加載模式,是指當需要展開父節點時才渲染子節點。懶加載模式的應用場景適合樹節點數據量大的情形,在一定程度上可以優化圖形用戶界面的響應效率以及提升用戶體驗。但是,懶加載模式對數據動態刷新應用需求的支持不盡如意。樹形控件節點一旦展開就緩存在本地,后續不會再繼續更新和刷新節點數據。本文將介紹如何實現Element樹形控件Tree在懶加載模式下的動態更新。具體需求如下圖所示:

詳解如何實現Element樹形控件Tree在懶加載模式下的動態更新

動態更新需求

當Select選擇器選擇箱變、逆變器、匯流箱或組串等類型時,Tree樹形控件會動態刷新顯示相應類型的設備名稱。我們知道在懶加載模式下,Tree樹形控件節點一旦展開,就不再重新加載節點數據。那么如何實現在選擇不同類型時動態刷新樹形控件節點數據顯示呢?一種實現思路是在Select選擇器發生變化時,在change事件中清空Tree樹形控件的全部子節點,然后再重新加載樹形控件節點數據。關鍵代碼如下圖所示:

詳解如何實現Element樹形控件Tree在懶加載模式下的動態更新

清空樹形控件節點

首先,通過樹形控件的父節點清空所有子節點數據,然后調用loadNode1方法重新構建樹形控件懶加載數據。loadNode1是樹形控件load屬性指定的加載樹的方法,該方法在加載樹或者展開某個節點時會被自動調用。

我們可以看到,傳遞給loadNode1方法有兩個參數,this.node和this.resolve,這兩個參數都是樹形控件頂層節點屬性數值。那么,是如何獲取到這兩個參數數值的呢?具體方法是:首先,申明node和reslove兩個變量用于保存頂層節點的node和reslove數值。然后,在樹形控件加載時將node.level===0情況下的node和reslove數值保存。如下圖所示:

詳解如何實現Element樹形控件Tree在懶加載模式下的動態更新

獲取頂層節點

loadNode1內部是通過reslove方法,將數據逐級推至樹形控件數據結構中的。先執行reslove方法的數據是父節點,后執行reslove方法的數據是子節點,在無子節點的情況下通過調用reslove([])實現。

結束語:至此,實現了Element的Tree樹形控件懶加載模式下的節點數據動態更新。在子節點數據量大的情況下,懶加載和動態更新機制,在一定程度上解決了響應效率問題,也提升了用戶體驗。

補充:element ui 懶加載樹節點內子項的動態更新

<el-tree
 :props="props1"
 :load="loadNode1"
 lazy
 show-checkbox>
</el-tree>
 
<script>
 export default {
  data() {
   return {
    props1: {
     label: 'name',
     children: 'zones',
     isLeaf: 'leaf'
    },
   };
  },
  methods: {
   loadNode1(node, resolve) {
    if (node.level === 0) {
     return resolve([{ name: 'region' }]);
    }
    if (node.level > 1) return resolve([]);
 
    setTimeout(() => {
     const data = [{
      name: 'leaf',
      leaf: true
     }, {
      name: 'zone'
     }];
 
     resolve(data);
    }, 500);
   }
  }
 };
</script>

上面代碼是element ui官方樹懶加載的實例。實現就是添加lazy,綁定一個load屬性,點擊節點的時候,就會觸發loadNode1的方法,將數據刷到點擊的節點里面。

這里的問題是:如果該節點load過數據,再次點擊是不會觸發loadNode1這個方法的,但是這個節點下的子節點也許會動態增加或者刪除

解決的思路是:

1、得到選中的節點

2、將選中節點的子節點全部刪除

3、將選中節點的子節點數據手動刷到該節點內

我查過element ui源碼,這里用到源碼內的方法,所以我們實現下來很方便,只要三行代碼

function refreshLazyTree(node, children) {
 var theChildren = node.childNodes
 theChildren.splice(0, theChildren.length)
 node.doCreateChildren(children)
}

1、node就是選中的的節點(也就是點擊展開的節點),你可以通過element ui里的getNode方法獲得,也可以直接監聽@node-click事件直接獲取選中的節點。

2、children就是node這個節點的子項

3、通過splice方法刪除node節點下的所有子項

4、調用doCreateChildren創建子項就ok了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

永吉县| 郯城县| 尖扎县| 来安县| 凤冈县| 樟树市| 泰兴市| 碌曲县| 阿瓦提县| 黔江区| 东光县| 沈丘县| 额敏县| 湛江市| 麻江县| 聂拉木县| 渑池县| 富宁县| 营山县| 出国| 乐亭县| 徐汇区| 大兴区| 锡林郭勒盟| 建阳市| 上饶市| 乾安县| 龙游县| 彩票| 荔波县| 衡东县| 溧阳市| 抚宁县| 盐亭县| 和顺县| 洛川县| 安达市| 罗甸县| 澳门| 田林县| 凤城市|