element-ui el-table 懶加載情況下數據的更新,以及節點手動展開


前言

element-ui中的懶加載文檔解釋的不算詳細,實際處理時有的需求也是查了半天才實現的

先貼一下我的樹的定義,主要,我這里綁定的reflist,綁定的數據是roomList,當然lazytrue

      <el-table
        ref="list"
        :data="roomList"
        row-key="id"
        size="small"
        :lazy="true"
        :load="loadChildrenRoom"
        :row-class-name="getRowClass"
      >
xxxxxx
      </el-table

問題1:節點數據更新以后,如何更新子節點數據?

如果只是單純的更新綁定的數據,我這邊嘗試是不能更新節點數據的。

這個在網上能搜到不少,最終我能夠使用的方案,是在重新加載時,清空對應ref下的這兩個數據:

        this.$set(this.$refs["list"].store.states, "lazyTreeNodeMap", {});
        this.$set(this.$refs["list"].store.states, "treeData", {});

我嘗試的結果是無論少清除哪一個,都會有問題

問題2,編輯子節點保存以后,樹就收縮了,那么如果在保存完成后,自動再展開到子節點呢?

注:我這里處理的情況都是最多一層子節點,所以代碼只考慮了一層。

這個問題我在網上搜了半天,最接近的就是這篇文章地址,不過很遺憾,我按照這個方式,設置hasChildrenchildren並不能起效。

搗鼓了半天,最后發現,還是需要從上面的lazyTreeNodeMaptreeData入手。
通過打印,我發現treeData實際包含了各個節點信息,其中有一個關鍵屬性是expanded,就是表示該節點是否展開(當然如果不是雙向綁定可能也是白搭,不過測試發現通過設置這個值確實可以觸發展開)。
lazyTreeNodeMap包含了所有待展開葉子節點的數據。

所以最后的解決方案是,在正常加載完第一層節點數據后:

  1. 獲取需要展開的節點的子節點
  2. 將子節點設置到需要展開的節點的children屬性上,並將hasChildren屬性設置為false(如果不設置false,會有小bug,展開的小箭頭狀態與實際展開狀態不對應)
  3. treeData中設置該節點的expanded屬性
  //treeData[id]中的id就是需要展開節點的table定義的rowkey屬性值
  this.$set(
    this.$refs["list"].store.states.treeData[id],
    "expanded",
    true
  );


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM