亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解如何實現(xiàn)Element樹形控件Tree在懶加載模式下的動態(tài)更新

 更新時間:2019年04月25日 09:13:49   作者:皮皮裴  
這篇文章主要介紹了詳解如何實現(xiàn)Element樹形控件Tree在懶加載模式下的動態(tài)更新,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

動態(tài)更新需求

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

清空樹形控件節(jié)點

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

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

獲取頂層節(jié)點

loadNode1內(nèi)部是通過reslove方法,將數(shù)據(jù)逐級推至樹形控件數(shù)據(jù)結(jié)構(gòu)中的。先執(zhí)行reslove方法的數(shù)據(jù)是父節(jié)點,后執(zhí)行reslove方法的數(shù)據(jù)是子節(jié)點,在無子節(jié)點的情況下通過調(diào)用reslove([])實現(xiàn)。

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

補充:element ui 懶加載樹節(jié)點內(nèi)子項的動態(tài)更新

<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官方樹懶加載的實例。實現(xiàn)就是添加lazy,綁定一個load屬性,點擊節(jié)點的時候,就會觸發(fā)loadNode1的方法,將數(shù)據(jù)刷到點擊的節(jié)點里面。

這里的問題是:如果該節(jié)點load過數(shù)據(jù),再次點擊是不會觸發(fā)loadNode1這個方法的,但是這個節(jié)點下的子節(jié)點也許會動態(tài)增加或者刪除

解決的思路是:

1、得到選中的節(jié)點

2、將選中節(jié)點的子節(jié)點全部刪除

3、將選中節(jié)點的子節(jié)點數(shù)據(jù)手動刷到該節(jié)點內(nèi)

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

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

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

2、children就是node這個節(jié)點的子項

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

4、調(diào)用doCreateChildren創(chuàng)建子項就ok了

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue跳轉(zhuǎn)頁面打開新窗口,并攜帶與接收參數(shù)方式

    vue跳轉(zhuǎn)頁面打開新窗口,并攜帶與接收參數(shù)方式

    這篇文章主要介紹了vue跳轉(zhuǎn)頁面打開新窗口,并攜帶與接收參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue 手機物理監(jiān)聽鍵+退出提示代碼

    vue 手機物理監(jiān)聽鍵+退出提示代碼

    這篇文章主要介紹了vue 手機物理監(jiān)聽鍵+退出提示代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue?非常實用的自定義指令分享

    Vue?非常實用的自定義指令分享

    這篇文章主要介紹了Vue?非常實用的自定義指令分享,Vue自定義指令有全局注冊和局部注冊兩種方式,在?Vue,除了核心功能默認內(nèi)置的指令?(?v-model?和?v-show?),Vue?也允許注冊自定義指令,下文小編給大家分享那些常用到的Vue自定義指令
    2022-02-02
  • vue 項目全屏插件screenfull使用案例

    vue 項目全屏插件screenfull使用案例

    這篇文章主要介紹了vue 項目全屏插件screenfull使用案例,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • vue element el-form 多級嵌套驗證的實現(xiàn)示例

    vue element el-form 多級嵌套驗證的實現(xiàn)示例

    本文主要介紹了vue element el-form 多級嵌套驗證的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue3中defineProps及使用方法詳解

    vue3中defineProps及使用方法詳解

    defineProps是Vue3中的一種新的組件數(shù)據(jù)傳遞方式,可以用于在子組件中定義接收哪些父組件的props,這篇文章給大家介紹vue3中defineProps及使用方法詳解,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Vue-cli3.X使用px2 rem遇到的問題及解決方法

    Vue-cli3.X使用px2 rem遇到的問題及解決方法

    這篇文章主要介紹了Vue-cli3.X使用px2rem遇到的問題及解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 解決vuex改變了state的值,但是頁面沒有更新的問題

    解決vuex改變了state的值,但是頁面沒有更新的問題

    這篇文章主要介紹了解決vuex改變了state的值,但是頁面沒有更新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue 圖片轉(zhuǎn)base64本地路徑跨域方式

    vue 圖片轉(zhuǎn)base64本地路徑跨域方式

    這篇文章主要介紹了vue 圖片轉(zhuǎn)base64本地路徑跨域方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Vue 實現(xiàn)從小到大的橫向滑動效果詳解

    Vue 實現(xiàn)從小到大的橫向滑動效果詳解

    這篇文章主要介紹了Vue 實現(xiàn)從小到大的橫向滑動效果,結(jié)合實例形式詳細分析了vue.js橫向漸變滑動效果的實現(xiàn)步驟、相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2019-10-10

最新評論